[Sorry, looks like you had already included all of the relevant files in your initial post.]
OK, so I've looked at this and I think it's doing what it is supposed to be doing. But there could be room for tweaking what it is supposed to be doing, I guess.
So what is happening is the Automatic Prizes feature is kicking in and replacing all of the [unlocked] prizes with the prizes defined in the auto2.xml prizes file for the computed prize level. The code specifically tries to do this only when necessary, and it defines necessary as (1) when you initially turn on the Automatic Prizes feature and (2) when the computed prize level changes. In other words, it doesn't want to replace the current set of prizes with the exact same set of prizes if it can help it.
In this case, that is exactly what it is doing, but the reason is that it doesn't know what the "previously computed prize level" is, so it has to assume it has changed. This is because this value is not saved with the tournament. So if you load a tournament that uses the Automatic Prizes feature, the first action in the tournament is going to cause the Automatic Prizes to update the set of prizes, regardless of whether or not it would actually be changing anything. After that, it knows what the "previously computed prize level" is, and will only update the prizes if the prize level changes.
My suggestion, to work around this, is to disable Automatic Prizes once you've bought in all of your players. Not something you want to have to remember to do, I know, but at least it will work around this in the meantime.
In the long run I'm not certain how to fix this. Right now the automatic prizes code doesn't really look at what happened in the tournament, only that something happened. Since you are using only buy-ins to determine the prize level, if it were smarter it could determine if the action was a buy-in or an undo of a buy-in and only check for a change in the prize level if so.
I'll look into it.