Check the following in your code: When you open the file for writing, do you open it with FileMode.OpenOrCreate or with FileMode.Create? Because the former (OpenOrCreate) will have the effect, that if the file already exists, it will simply be opened (without deleting the existing content). Then if the data that you write is shorter than the data that was written before, the additional bytes of the old data will still be part of the new file (at the end). Which will break the XML syntax during loading, as there are additional characters at the end. You need to use FileMode.Create, which will have the effect, that if the file does not exist, it will be created, and if it already exists, it will be overwritten.
The problem is, that even the serialization example in the XNA docs contains this bug, so many people probably transfer the bug from there to their own code (see here, where the bug is contained in the sample code:
http://msdn.microsoft.com/en-us/library/bb203924.aspx).
Doc
EDIT: I now submitted this to
connect.