I looked up the related answers, it must have to do with the scope. Toy example similar to mine in structure:
foo[i_] := Array [If[Slot == Slot[i + 1], 0, 1] &, ConstantArray[2, 3]];
Fail: in bar, Slot[1+1] does not compute. I hotfixed it by using
instead of the 2nd Slot and it works as intended. Of course I can apply generous Where, With etc. statements instead like suggested in the other answers, but I'm just curious: When does Slot goes on Hold? Do other constructs than Slot have the same problem?