Admittedly, the issue is that IsModified queries the whole widget tree, which I now find quite confusing. Anyway, current solution is IsModifySet.
That said, I agree that current situation is confusing, so I am changing
ResetModify -> ClearModify
ClearModify -> ClearModifyDeep
IsModifySet -> IsModified
(While this is quite a change of contract, search through all of my projects revealed that a) Modify flag is really not used that much often b) current use actually rather expects above behaviour).
All that said, this whole solution is not able to check for the situation where you change data and change it back. So maybe even better would be to actually compare original content witch current one, or its hash...