I know the cause will be to do with the many conditions but I don't really want to spend time trying to work out where exactly, instead I will say I think the bools are unnecessary unless there is something about the game design I'm not aware of. I would rework this to just use 'active power' and set up the player and behaviours for that power based on this, no need to add complexity with the bools on player as it is creating bugs. It will be very simple if you scrap the bools and have active power set without checking if you don't have other powers.
All could be one in one function, for example :
on I pressed - run function 'assign power' with slot 1 power name
on O pressed - run function 'assign power' with slot 2 power name
on P pressed - run function 'assign power' with slot 3 power name
function 'assign power'
- if 'power = Flight' - disable platform, enable 8 direction
- if 'power = Invisibility' - disable 8 direction, enable platform
- if 'power = Athlete' - disable 8 direction, enable platform, set speed
etc
For UI display things you can check what the current power is, if the name of the slot is not this power then you dim them etc You can assign current power to a global variable at the point you press I, O, P, and use it in this way.