Copy to copies the data from current position. so it fails to copy as position is at end. where as ToArray
returns all data irrespective of position.
Copying begins at the current position in the current stream, and does not reset the position of the destination stream after the copy operation is complete.
Try this
MemStream.Position = 0;
MemStream.CopyTo(RequestStream);
Refer Stream.CopyTo for more info