This is an off the cuff response based on a very similar experience I had recently. In the end, after days of trying to get consistency across requests that I was sending to various installations of the same endpoint, it worked out to be a missing or incorrectly set Content-Length header that the server was expecting. The different servers I was sending to were configured slightly differently.
Basically, I had manually changed the content of one or two of the requests I was testing with, and either failed to update the Content-Length property, or missed it out of the request entirely.
I say check and double check that your HTTP headers are correct.