I don't know if it is possible to limit creation of change objects for only those affected items that are in a certain state. It seems like this would be tricky since the change object is a completely different object with its own lifecycles, permissions, etc.
You can hide visibility to these controls with profiles. For example, the profile applied to this user only allows promotion requests:

To get started, create a new profile, uncheck everything, and apply it to a test user. See what is missing then slowly add back in functionality you want that user to have. Once happy, apply the profile to other users, groups, or contexts.
I would suggest creating the profiles at the org level initially. They can easily be exported and imported to other locations.
Keep in mind that profiles only hide things, they are not access controls. They also don't hide everything, and some things they are are supposed to hide actually don't get hidden. Still, they are better than nothing.