I think you should make the quote uneditable once the invoice has been created. There are various ways, but one would be once they click a button to create an invoice from this quote, you check for a flag. If the flag does not exist, set flag, create invoice. If flag does exist, show custom dialog, "This quote has already been converted to an invoice." Exit script.
Now if you have a situation where you may have to change a quote (typo, wrong info etc., after the show custom dialog, you can give them the option to send the altered quote to create an invoice. But in that case you would have to find/delete the previous invoice, or find/edit the previous invoice. Putting housekeeping fields in the invoice, created by:......on........ and modified by:..........on........could help.
I've seen (on the VTC videos) a technique, where the 'quote' was tied to an OnRecordCommit (I think), to run a script. If the record was altered, and the user wanted to change it, the script re-logged in under the admin and paused, the admin had to physically put in their password, then the script continued with a re-log in of the user, and allowed the changes to be saved.