You don't need array of units and unit groups. The "Pick units in Unit Group" action picks every unit in that group. You can just use "Picked Unit" to pick each unit separately and deal damage to it.
You never set Slice_X back to 0 at the end of the spell, you just reduce it by one.
Also, never use WAIT if you plan on this to be a multiplayer map because it is not MUI (Multi-Unit-Instance) and it will bug if multiple units cast it at the same time, resulting in either infinite loops, lag or crash.
EDIT: Here is your problem.
----------
Set Slice_Group[Slice_X] = (Units within 380.00 of (Position of Slice_Target[Slice_X]) matching ((((Matching unit) is A structure) Equal to False) <span style="font-size: 18px">or</span> ((((Matching unit) is alive) Equal to True) <span style="font-size: 18px">or</span> (((Matching unit) belongs to an enemy of (Owner of Slice_Caster[Slice_X])) Equal to True)
----------
Because all the conditions are OR THIS, the unit group just picks the first condition that is true.
Change the OR to AND and it will work as you want it. Like this:
----------
Set Slice_Group[Slice_X] = (Units within 380.00 of (Position of Slice_Target[Slice_X]) matching ((((Matching unit) is A structure) Equal to False) <span style="font-size: 18px">and</span> ((((Matching unit) is alive) Equal to True) <span style="font-size: 18px">and</span> (((Matching unit) belongs to an enemy of (Owner of Slice_Caster[Slice_X])) Equal to True)
----------