On the AWS forums it was clear that AWS was aware of this consistent problem, but was not able to fix it, and not willing to document it.
They eventually released "multipart upload", which remains the only reliable way to get large files to S3. Unfortunately, multipart upload is nearly impossible to implement as a web app (short of resorting to e.g. Java).