Give each powerup a chance, the level or difficulty manager may need to modify it too according some rules.
The powerup picker gets one up from the sum of chances (and possible modifiers), the manager decides which powerup fall in that number.
Expanding a bit the idea:
Chances.
PowerupA: 40
PowerupB: 60
PowerupC: 20
|.......... ................. .......
| | | |
| A | B | C |
| | | |
+-------------------------------------->
The picker gets a number from 120, the manager decides which one falls there, this could be dynamic so if you keep adding powerups, the system won't need to be touched.
This could allow to set fuzzy logic rules, near of where the vertical lines are, you could add overlapped chances for one or another, is something common for AI but useful for subtle difficulty settings and scaling too (is just a bit harder to design).