I used Manage UI to change a setting, like the environment assigned to a given node, but it didn't change.
The Chef Client run starts with the Chef Client grabbing the current state of the node object from the database. It holds that state during the run, makes any intended changes that its cookbook recipes direct, then writes the final state back to the chef server database through the API.
If a Chef Client began running before a Manage UI change was sent, the Chef Client will always write back the original node data, including the environment setting, from the in progress change to the Chef Server. In this way, the subsequent change made by Manage UI will be overwritten.
To expand the above idea, if a Manage UI client comes along and makes a change, that change will take place on the chef server node object, but the final write by the in-progress Chef Client will come along and overwrite the intended state. This is not a bug, but the design of the Chef Server system. For this reason and others, Manage UI should only be used in a read-only fashion.
The best practice is to apply all changes to a chef server through a CI/CD pipeline. In this way all changes have a source, are auditable and trackable through the entire system.