Well, I finally found the problem. I don't really understand the solution, but it works.
I have some TCHAR arrays set up in my persistent structure (high score names) that gets saved to the registry. Before loading values into this array from the registry, I would zero them out by using a for-loop to assign 'NULL' to each element in the arrays.
For some reason, doing this caused all my registry data to load corrupted. I removed the NULL assignments and it's working now. Very strange.