What about something like:
```
var uiVal, 
    newVal, ...

// in the loop
uiVal = this.getUIValue(attr);
map[attr].host.set(attr, this.getUIValue(attr), {
    src: 'UI'
});
newVal = map[attr].host.get(attr);

// not sure if setters or getters need to get involved here?
if (newVal !== uiVal) {
    this.setUIValue(attr, newVal);
    // and perhaps fire an event?  So at least we know something
    // didn't happen, even if we don't know the precise reason.
}
```
There's obviously the performance overhead of the extra get().  Is that a problem?  But wouldn't it pick up all the possibilities of the value getting changed?  Assuming they're all synchronous, that is (I think they are?)