If changes are occurring locally only (i.e. a one-way sync) you might think about just using an archiver (zip, tar, etc) to archive the modified files for transport up to the remote server. Presumably you can use the modification date, archive bit, or, worst-case, maintain a second local copy to use as the basis for determining which files have changed.
Rsync and other delta-copy programs are nice, but I suspect that your problem may be simple enough to solve w/o going to that extreme. With a large number of small files you'll also experience a lot of delays using rsync because of latency.
Since your source is a Windows machine you could use the "Archive" bit as a telltale for which files have been modified (assuming the update process is toggling the archive bit). You could do something simple like:
rem Copy all files from source to staging, including subdirectories,
rem where "Archive" bit is set.
xcopy "%SRC%\*" "%STAGING%\" /e /s /a
rem Untick archive bit on all files in source
attrib /S /D -A "%SRC%\*"
That would leave the "staging" directory filled with only the files that have changed (albeit with empty subdirectories for every directory where files didn't change, too). It would also reset the archive bit on all the files in all the subfolders. You could ZIP that staging directory up (using your favorite command-line ZIP program) and ship it out to the remote server for decompression.
This doesn't give you any delta compression, but at an average size of 51KB / file it sounds like delta compression won't help you too much and the latency "win" of this simplistic method may be better for you.