По первому варианту - что означает "нарушается структура"? Не должна она нарушаться при посимвольном копировании. Однако, тут возможны проблемы с кодировками. Нужную кодировку надо определять либо по ContentType - либо по декларации xml.
По второму варианту - разумеется, это и не должно работать. Прочитайте в документации, что делает ReadString.
--
Теперь как надо сохранять xml. Вариант первый - просто побайтово. Используйте stream напрямую, не оборачивая его в StreamReader - а для записи используйте FileStream.
Вариант второй - загрузить поток в XmlDocument или XDocument на выбор, а потом сохранить.