I thought for completeness that I would go through some of the KnowledgeBase articles that document problems sending MSMQ messages over HTTP.
883474 Large messages that are sent over an HTTP session may not leave the outgoing queue
Basically an HTTP Response must come back from the web server within a certain time or the message will be rejected and redelivery must be attempted. Unfortunately the article doesn't say what the default timeout is.
The workaround is to add the HttpResponseTimeout registry value and set it to the number of milliseconds that allows messages to get through.
Note that this will also help with busy servers which can't reply in time as well as with slow links.