This approach is going to be problematic with actions such as DPMS or KeyboardBrightnessControl which don't just respond to idle timeout callbacks, but also other stuff such as suspend/resume.
Not to mention that unloadAllActiveActions() is a little overkill if you find even just a single inhibition. At the very least, you'd want to unload only those actions that actually require the listed inhibition policy.
Personally, I'd feel more comfortable with an approach that only touches the timers themselves. For example, we already have some timer suspension logic in the handler lambda for the PolicyAgent::sessionActiveChanged signal - which, to be clear, isn't bug-free either. Let's not add another layer of complexity by destroying and recreating actions on a trigger other than profile changes. It's already hard enough to reason through.