Hmmm just a quick idea , i can't test anything now
how about doaing a traceline to the bottom in PreThink so i can get when the player is in air just above the func_rotating (pev_groundentity only changes when you touch the ent first)
and you force the player to unduck in the air? aka setting bInDuck or sending -duck, buttons and stop all duck commands from then on