It is You just start your timer endlessly in process(). You should have noticed that, because your print statement must always show starting time in console. Your timer is never stopped, always running, so it never reaches this part of the code, that turns shield to invisible.
You already used boolean "powerupactive" to border if statements in process. You can reposition it, so the timer is only started once, visibility set to true or false also just once. Of course You should use "timeout" signal or setget for the most ellegant sollution, but whatever works is fine