I went into much more details in my numerous devlogs on reddit, but I'll sum it up for you :I don't get why so many games have this problem. Renpy or not.
Saving and Loading stuff is hard. Saving stuff is relatively easy, but loading a save can be incredibly complicated, because you have to figure out a way to turn some arbitrary data back into variables, their contents, and their types. It's not trivial.
When you save a renpy game, renpy saves a snapshot of the game at that state, saves every variable, every object, everything. When it saves that data though, it also saves unnecessary stuff, stuff that is subject to change in future versions of the game.
Loading the save data used to be done directly, i.e. set each field, each attribute, each variable from the save data. But what happens when a change has been made to an object and that object is loaded that way? Well, the old version of the object is used, but some attributes that the game now expect to be there, aren't there anymore, because those attributes didn't exist when the save was created, hence, a bunch of weird glitches.
Fear not though, save compatibility is coming in 0.19. 0.18.6 saves will not be compatible though (it's too much effort to translate the old save format to the new one, and even if I did, it would be very hacky, and supporting that doesn't seem like a great choice). Theoretically, 0.19 saves will be compatible with 0.20, 0.21 etc.