The documentation is not clear, how MaxBytesPerRead is different from other limits, e.g. MaxBufferSize or MaxReceivedMessageSize.
From http://geeksdiary.com/archive/2007/05/23/pox-streaming.aspx :
The MaxBytesPerRead value indicates how many bytes the XmlDictionaryReader should read when reading the element start tag and its attributes. Therefore, this value should essentially be large enough to read that information. If you set an unnecessarily large value here, the XmlDictionaryReader.Read() method will not return until it receives enough bytes from the underlying transport(this could be problematic if you receive very small data chunks with a considerable amount of delay)