Ensure there are dirty fields when performing update

It's possible that the 'updating' or 'saving' events could cause fields on the model to 'reset' (i.e. revert back to their original values). Since the dirty fields are pulled again before performing an update, we must make sure there are fields there to update, otherwise it could generate an invalid query in the form of:
UPDATE table SET *nothing* WHERE id = 123

Was originally submitted in #2825 for 4.0, but ticket was closed and only partially implemented in 4.1