Use both. Except auto save should not directly go to new/edited entry, but to its draft version. If user closes form for whatever reason (or in case of crash) and then decides that he wants those changes after all - you pull out saved draft and let user continue from where he left.
Buttons below the form should let user finalize the changes - i.e. commit to base, publish, send, whatever, and revert to last committed version where applicable.
This might be different in some scenarios, but often incomplete data isn't useful and can even be confusing, especially if user publishes it in some way for other people to see as opposed to editing some personal database, so it's better to still have some way for editor to signal "it's ready for consumption" instead of pushing every little thing to outside world automatically.
That's, IMO, is most intuitive approach. That's how GMail works with autosaving your drafts all the time, but sending only when you directly instruct it to. Even the comment form where I write this answer right now works this way - whatever I type is continuously saved as draft and never lost, but I need to explicitly push "post your answer" when I'm done.
no button needed
. But... If, as you posited, saving a field should occur when the user unfocuses it, then how do they save the final field? By clicking/tabbing out of it into an earlier field? That seems very undiscoverable and unfriendly to me. It almost seems like you would need another control after the last field, to save it... like some kind of Save button... :S