Better error message for update()

Improves the error message for update() when the existing value is the same as the new one, as suggested in #1254
These are actually two separate error states. We'll need to handle them both.