Much of what you describe can be accomplished by turning off the auto-save option for the layout in Layout setup...
Your save and cancel buttons can then use commit record and revert record to save or cancel your latest edits to the record. You can cover the entire background of the layout with an empty web viewer to keep clicking the layout background from triggering a commit record action.
Reverting a saved record back to a previous value is much more difficult. You'd have to store all the previous values in another record before you could revert back to the previous values.