No, Steven, all is fine with using RefreshPanels() and CommitTags() calls. There is a problem with sending notifications to plugin. That's what I've found out (only for updating tags of playing track):
1. Clicking 'save' button in docked tag editor if no tag was *actually* changed always sends TagsChanged message.
2. Clicking 'save' button if any tag was *actually* changed sends TagsChanged message only after second click.
3. Updating tag by API call never generates TagsChanged message (if track is playing).
Very strange behavior, not documented and unexpected.
Processing of TagsChanging message seems to work fine, but I've found another issue: play and pause track, close MB, restart MB, *actually* change any tag of paused track in tag editor or commit tags for this track using API, close MB. You'll get 'Unable to open file for writing' error message.