Проблема заключается в сочетании FileMode.OpenOrCreate и типа членов ViewerRecord. Один или несколько из них не имеют фиксированного размера, вероятно, строки.
Когда файл уже существует, все идет не так. Вы начнете записывать данные в начале файла, перезаписывая существующие данные. Но то, что вы пишете, только случайно перезаписывает существующую запись, строка должна быть точно такого же размера. Если вы не напишите достаточно записей, вы не будете перезаписывать все старые записи. И когда вы читаете файл, у вас возникают проблемы, вы читаете часть старой записи после того, как прочитали последнюю записанную запись. Вы получите мусор на некоторое время.
Создание фиксированного размера записи на самом деле не решает проблему, вы прочтете хорошую запись, но она будет старой. Какой конкретный набор старых записей вы получите, зависит от того, сколько новых данных вы написали. Это должно быть так же плохо, как чтение искаженных данных.
Если вам действительно нужно сохранить старые записи, вам следует добавить файл FileMode.Append. Если вы этого не сделаете, то вам следует переписать файл FileMode.Create.