The 'On loop' condition only works with a constant (ie. typed in) loop name. I thought I put in a warning in case the expression wasn't constant, but I guess somehow it got turned off. I could have allowed variable names, but it would reduce the algorithmic efficiency considerably. If you can't assume that every string is going to stay the same, every time you run 'On Loop', you have to check all other unrelated 'On loop' conditions to see if their name matches the loop being run, every iteration. This means if you have On loop "a", simply adding some events for loop "b" slows down loop "a"! However, in Construct, forcing a constant string name for the loop allows for an optimisation I've coded that keeps that painful inefficiency from occurring.
Still, the 'start loop' loops are much, much slower than the condition loops (eg. 'For'). I wouldn't recommend you use them at all. They spread out the code to unrelated places in the event list as well. Condition loops keep everything tidy, and are much faster. The CPU cycle overhead per-iteration for the 'Repeat' system condition was about 9 cycles last time I measured it; it'll be hundreds of cycles for anything using 'start loop'.
As for the condition loops, you should be able to get away with using a variable for the name, but I wouldn't recommend it. It'll only work so long as the variable stays the same for the duration of the loop. I can't see why it's necessary to ever do that though.