Think more about what tool/SEXPs I used rather than the whole execution - I am pretty sure I made more than one mistake in each one and/or that I missed a condition; and I am sure that they can be compressed somewhat. (I happens when I prototype without the intend to test myself)
Attached is the mission file, if it is just the output that is making it hard for your to read.
Basically, the first one checks each of the Beta if they fired from their secondary banks, and that at ([Full compliment of a bank] - 2 * [target index number, starting with 1]) their secondaries would be locked, and they would be excluded from the check. If all Betas had been successfully checked in this matter, the event will move the [target index number] to the next one, which will then allow a similar check (but with a lower limit per bank) while the attack on the next target takes place.
The second one basically does something similar but instead of checking individual banks it adds up the maximum torpedoes avalible as Beta arrives and then uses that number to calculate the limit at which to switch targets. The other events basically just keep track at how many torpedoes remain (for the check against the limit) and how many Betas are actually still on the board (for the purposes of calculation).
(ps. when I started this I could have sworn there was SEXP to test if a when-argument no longer had any valid arguments; I couldn't find it so build the workaround with the variable)
The player changing the orders for Beta is a different problem, I had not yet considered... You can always overrule the player by giving the ai-chase order a priority of 100+ ...
Other than that, Scripting?