ok i finally got it fixed.
Originally I had two common events, one called "cast forcefield", the other called "forcefield fx". This cast+fx pattern allows parallel events activated by skills to be turned on and off, and to auto quit when a condition is met, such as running out of mana.
The cast forcefield code was originally pretty simple, controlling the forcefield switch to be "on", as you might have guessed.
The problem is the "cast forcefield" is an instantaneous effect, and I had to put in a $game_temp.in_battle conditional script that would also add my $game_actors[1].mod_pdef... script to make it work for 'one round'. Once it is cast during combat, i followed up with a Control switch fx = on like normal, but also inside the "game_temp.in_battle..." conditional, so the off switches would be available after combat ended.
It was pretty messy to figure out initially because I had a "target on" interference switch designed to only keep one power active at a time, but then I remembered Magneto from the X-men had a forcefield up and was still able to attack. Previously the "target on" was turning off my "forcefield FX" switch, but not the bonuses, because those require you to hit the shift key, and that's internal to the forcefield FX, while the bonuses are external and not directly dependent on the FX to work. Rather than make the "target on" even more complicated, I decided to simply separate the two codes and make forcefield an independent effect.