Z>1. почему не используется GetBytes()?
Попробовала GetBytes():
byte[] b = new byte[8192];
reader.GetBytes(0, 0, b, 0, 8192);
System.IO.Stream bs = new System.IO.MemoryStream();
bs.Write(b, 0, b.Length);
аналогичный таймаут...
Z>2. таймаут чего возникает? если просто в дебагрежиме вываливается и по нажатию на продолжение чтение продолжается и завершается успешно, то это не страшно. я когда-то сталкивался с такой ботвой, но не помню где имменно нужно поставить галку в настройках студии. помню тока что гугл мне помог минут за 5 примерно 
Таймаут: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
Вываливается в catch... чтение успешно не завершается
Гуглю видать неправильно

подходящего решения никак не найду