Currently the code is designed to automatically change the location type of an address if there is a conflict during a merge - even using safe mode.
This seems to be saying:
If there is a 'home' address on both records.
Then go through all the possible location types for addresses and effectively pick one at random (that isn't used on the main contact). Assign the address as that type and put it on the main contact.
This is not very good logic as the type of address is obviously quite important (home, work, etc.).
I propose that a 'safe' merge should always throw a conflict in the case of addresses - don't randomly try to assign a new location.
This still matches the logic in the UI that says a contact can only have one address of each type still.