Я не знаю C #, поэтому я боюсь, что не могу дать вам код для этого, но основная идея - прочитать весь файл как текстовый файл utf-8, используя DecoderFallback для замены недопустимых последовательностей либо символами вопросительного знака, либо символом Unicode 0xFFFD. Затем запишите файл обратно как текстовый файл utf-8 и проанализируйте его.
По сути, вы отделяете операцию «уничтожения некорректных последовательностей utf-8» от операции «разбора файла xml».
Вероятно, вы даже сможете пропустить повторную запись файла, прежде чем запускать анализатор XML для чтения фиксированных данных; должен быть какой-то способ записать файл в поток байтов в памяти и проанализировать этот поток байтов как XML. (Опять же, извините, что не знаю C #)