Difficult to say, because AFAIK, no one knows what the problem is, specifically–just the end result.
You might want to take a look at How a Scrivener Project is Structured.
Right now, I’m checking the .scriv/Files/Doc and checking if the changes have been made before closing my Scrivener project. My hypothesis is that the changes are not being written to disk before closing, so when the project is closed and re-opened, the original file is loaded and all changes are lost. But I haven’t been able to prove that. It could be something else. Perhaps the file is being written elsewhere. Perhaps it’s being written and the original is being re-written over the changes. No idea. I’m making backups of my projects at the end of the day, opening another instance of Scrivener them to verify the changes are there, and then only closing both instances. It’s a bit of extra work.