Do you have any clue as to why protocol-httpclient has a different behaviour?
Also, two suggestions for your patch:
Perhaps you could finegrain the mechanism by allowing a configurable amount of timeouts before definitely failing. Something like:
if (++timeoutRetries>this.allowedNumberOfTimeoutRetries) throw e; //rethrow
Secondly, could you specifically catch SocketTimeoutException? (I'm not sure if there are other IOExceptions that shouldn't be catched in any case.)