Полагаю, вы получили первую часть своего ответа от @Donal Lafferty.В любом случае вот краткое резюме.
HttpWebRequest.Timeout - время, до которого сервер должен принять запрос клиента.Обратите внимание, что это не включает время разрешения DNS, которое управляется ServicePointManager.
HttpWebRequest.ReadWriteTimeout - время, до которого клиент должен получить все тело ответас сервера.Обратите внимание, что этот тайм-аут начинается только после того, как сервер примет запрос.
Ответ на ваш второй вопрос состоит из двух частей:
1.Синхронный запрос:
Соединения TCP закрываются по тайм-ауту, все довольны.
2.Асинхронный запрос:
Эти тайм-ауты абсолютно не влияют.Если у вас нет соответствующего механизма для обработки тайм-аутов, TCP-соединения останутся открытыми.
Именно поэтому вы прервите запрос, зарегистрировав тайм-аут в AsyncWaitHandle, как показано в примерездесь:
http://msdn.microsoft.com/library/21k58ta7.aspx