I love password safe. Unfortunately, I get in trouble with the merge option periodically. (merge just duplicated almost every record in my DB because I had redone the groups.) Having separate merge, compare and sync is a recipe for disaster, especially for non-technical users.
I am going to suggest a simple change that could fix most of the issues.
make compare be part of merge and on by default, so that if I merge I will get asked about conflicts.
handle most conflicts automatically.
The records already have a guid that gives a record identity, even if every field changes.
Extend last update time to be a list of some number of updates. A small number such
as 5 or ten would be practical and cover most cases.
Change each update to be a tuple <updatetime, guid=""> where the time is for the user,
and the guid is used for merge.
When merging, if the record exists in both DBs then check the current update guid of
each record against previous update guids of the other record. This way you can verify
if the current version of one record is a previous version of the other and just
ignore the other version.
Add a deleted flag to the update entry in the record <update time,="" guid,="" deleted="">
and then leave the record in the DB (at least for some period of time). This can
prevent putting back a deleted entry. This also handles the case where the record
is deleted in on DB and modified in the other DB, in which case the user can be
asked which to keep.