У меня раньше была эта проблема, и в начале файла присутствовала метка порядка байтов. Проверьте свой XML-файл в шестнадцатеричном редакторе и посмотрите, есть ли в начале три символа. Вы можете просто сделать что-то вроде следующего с вашим необработанным xml
if (xml.StartsWith(ByteOrderMarkUtf8))
{
xml = xml.Remove(0, ByteOrderMarkUtf8.Length);
}
затем прочитайте это в поток
или вы можете сделать что-то подобное при создании вашего потока
byte[] bytes = Encoding.UTF8.GetBytes(xml);
MemoryStream stream = new MemoryStream(bytes);
надеюсь, это поможет