This little gem comes to us courtesy of MS's IE, whereby it resets the connection and sets content-length to 0 (zero), even though there is data in the post request, when the keep-alive timeout expires.
Fortunately this only occurs when using HTTPS, and apparently it's limited to a particular version of IE (although I'm not 100% convinced about this).
This bug is documented very well here and by ibm here, and an typically difficult to understand MS solution here.
Another solution I think may work (if you're using ASP.NET), is to flush the response manually (Response.Flush())- my understanding is that this will disable the keep-alive header that ASP.NET sends out. Basically should allow you to still have the keep-alive setting switched on on your IIS server and by manually inserting the Flush() method you can restrict where this occurs to individual pages or apps (eg Global.asax). Although I've not tried this and could be completely wrong ;-)
HTH
Tim