Scrivener always saves on exit as well as auto-saving periodically while you’re working–the default is to auto-save every two seconds of inactivity, although you can change this under Tools>Options… in the General tab. Auto-saving always just overwrites the original (open) project file. If you hit Save or Ctrl-S, you’re performing the exact same action as the auto-save. So if you open ProjectA and work in it, all your changes are saved to ProjectA. If you use Save As, you’re creating a new copy of the project with a new name (or else in a different location–Scrivener won’t allow you to use Save As to overwrite the original file) and all further saves in the project will be in that copy, leaving ProjectA updated only to the point where you performed Save As. Additionally, the new copy, let’s say you named it ProjectA-1, will be the most top project in your Recent Projects list and will be the one that opens on default next time you launch Scrivener, if your options are set to auto-load the most recently opened project. So if you’ve been using Save As regularly, you’ve really created a string of projects, and it’s possible if the Recent Projects list was cleared that you might’ve opened an earlier version, not realizing you have a newer copy by a different name somewhere else.
Snapshots are a way to save versions of individual documents within the project. They’re great for keeping track of your edits in a given document since you can roll back to earlier versions if you decide you don’t like the changes (and take a snapshot of the current version in case the next day you decide you were nuts and the newer version really was better). They work on individual documents but not on the entire project (meaning, they save document text changes but only for the one document they’re a snapshot of, and they don’t save binder structure or meta-data or that sort of thing), and they’re stored inside the project. If you delete the document from the project, all its snapshots get deleted as well.
Compile, while a great way to get another copy of your writing, is really another animal all together. Compile saves your writing outside of the project, creating a single manuscript with all the documents you’ve selected to compile–usually your Draft folder, though you can also compile collections. If you absolutely had to, you could import a compiled document back into your project, or copy and paste sections back into the project, but it’s really more a last resort method as far as restoring a project. The real purpose of compile, of course, is to bring your finished manuscript out of all the little crazily formatted chunks where it resides in Scrivener into a single beautiful document that you can hand to your publisher and receive a big fat paycheck for. (Or something like that. ) But it also gives you another copy of your work, separate from your project file, and one that’s easy to work with in other applications (depending on the format you choose–RTF is best for this, since nearly everything reads it). If you include notes, synopses, and meta-data in your compile as well as document text and titles, then you can get a fairly comprehensive outtake of your projet, but most of the time compiled documents are just the text and titles, so if you’re relying on this as a backup strategy you might want to create a “backup” preset that includes as many options for pulling your info into the document as possible. And even with that, you still won’t be able to compile non-text documents like research PDFs and images, if it’s important to you to have another copy of those.
What you really want to do, if you haven’t been, is to regularly use the Backup Project To feature to create a complete backup of your Scrivener project. Check the zip option (not required, but recommended, as it makes a nice little archive file and makes it harder for you to accidentally open and edit a backup by mistake) and then save a backup copy of your project to a Backups folder that you make somewhere on your computer (or an external drive, if you regularly plug on in). You won’t work from these regularly–you’ll carry on using the same original file–but this will give you a time-stamped set of backup copies in case something goes wrong with your original project (even if it’s just, “Darn it, I made all these changes in my binder structure and I absolutely hate it now, I want to go back to how it was on Tuesday”). Since they’re dated and stored in Backups, you’ll easily be able to go find your most recent backup, extract it from the zip archive, and move that restored copy out to Documents (or wherever you regularly save your projects) and replace your mangled version with the backup and carry on as though nothing had happened.
That isn’t to say your other methods aren’t valid or that you should stop them all in favor of backups–they all have their own benefits for different purposes, especially snapshots and compile. (Save As is really more for forking a project, the presumption being that you wanted a new project with all or many of the same files and same binder set up as in your original project, but that you are going to continue working in each of them as two separate projects.) But definitely add Backup to your list, as that of course is its entire purpose: to give you a complete Scrivener backup of your project.