Well, MUI makes it easier, as you will have only one code, instead of duplicates with different variables. And if you already have some MUI spells in your map, it's better to be consistent with your approach. Of course, how you deal with it in the end is up to you.
Even when you set wait time to 0.22 seconds, the actual wait time is each time different - i.e. 0.28 the first time, 0.33 the second time, 0.30 the third time, etc.
This wait time is further off in multiplayer as there is an added latency due to synchronization of all players.
Last but not least, after Wait you may lose reference to some unit functions - i.e. "Target unit of ability being cast" may no longer point to target in your trigger. Only (Triggering unit) is immune to this, as far as I know.
So if you want to have accurate delays, you should use timers.
Also, I found some ancient post with statistics of wait delay, check the tables for single player and multiplayer:
Wait Command, Good or Bad?
Ok, for some reason the trigger is still cut off (not sure if this is WE issue or issue on this site). Based on what you wrote, the trigger may pick a same unit for AT_CL[2] and AT_CL[3]. Of course, later in the trigger, you check if AT_CL[2] != AT_CL[3]. But the issue is that from a pool of, let's say, 3 possible targets, you have a 33% chance of picking the same unit for AT_CL[2] and AT_CL[3]. So your spell is supposed to chain 2 times, you have 3 possible chain targets, yet there is a 33% chance that the spell will chain only once.
That depends on how complex the spell's behavior should be.
If you want to just hit N targets without any wait, you can do this:
-
Actions
-

Set VariableSet ChainSource = (Target unit of ability being cast)
-

Set VariableSet UnitGroup = <create unit group the same way like you do right now>
-

Custom script: set bj_wantDestroyGroup = true
-

Unit Group - Pick every unit in (Random 2 units from UnitGroup) and do (Actions)
-


Loop - Actions
-



Set VariableSet ChainTarget = (Picked unit)
-



-------- create dummy at ChainSource, order to cast spell on ChainTarget --------
-



Set VariableSet ChainSource = ChainTarget
If you want the delays between each lightning, that gets things complicated, as Waits should not be used in loop actions. Picking two random units could be done outside a loop like this:
-
Actions
-

-------- picks first chain target: --------
-

Set VariableSet ChainTarget = (Random unit from UnitGroup)
-

Unit Group - Remove ChainTarget from UnitGroup.
-

-------- do stuff for first chain target --------
-

-------- ----------------------------------------- --------
-

-------- picks second chain target: --------
-

Set VariableSet ChainTarget = (Random unit from UnitGroup)
-

Unit Group - Remove ChainTarget from UnitGroup.
-

-------- do stuff for second chain target --------