Sounds like the ideal solution is to treat anything that would affect the corresponding .uistate file as a project change to be saved then.
This means enabling the save button if you change things that only affect the UI, like reordering tabs. I don't think it's typical for software to do that - usually the save button is only enabled for meaningful content changes. As an example of that, if you use source control and ignore .uistate.json files (which is recommended), then such changes will enable the save button, and subsequently saving will cause no change to the project files on source control. So overall I think that is also a kind of confusing or unusual approach to take.