Поскольку вы написали в MemoryStream, позиция находится в конце потока. Верните его в начало, добавив:
MS.Seek(0, SeekOrigin.Begin);
сразу после того, как вы закончили писать в поток и очищать писателя. Итак (часть) ваш код будет выглядеть так:
...
MemoryStream MS = new MemoryStream();
StreamWriter Writer = new StreamWriter(MS);
Writer.Write(DateTime.Now.ToString() + "hello");
Writer.Flush();
MS.Seek(0, SeekOrigin.Begin);
...
EDIT:
Вам следует избегать вызова Dispose
на вашем модуле записи, так как он также закрывает основной поток.