Update: as a result of trying the highscore sorting, which I hadn't even realized existed until just now, I have determined that the problem is not that the information isn't being written, but that the .dats are in fact becoming corrupted somehow. All the lists other than my main one contained serious errors similar to those introduced when I changed values within the .dat by hand. In addition to garbage, pieces of legitimate data appeared out of place. As a result, I realized that the majority of both .dats is dedicated to telling the program where to look instead of the information itself. I could not, in fact, find where the data is stored among all the formatting info.
Why'd you do it this way, Kornel? Having a running total stored in the same place as directions for reading it always results in corruption eventually. Is there any particular reason you couldn't hardcode the table format into the game and just put the info in the .dats?
Sometimes I really wish I had the source for this sucker. ;_;