OK now I'm really confused.
Since it wasn't working anyway, I wired it up to the Arduino - simply replacing my switches with digital pins. shiftOut worked like a dream, as well as bit-banging (digitalWrite(signal, HIGH); digitalWrite(clock, HIGH); delay(10); digitalWrite(clock, LOW)

. Again, I didn't have to change anything about the circuit itself.
So I replaced the switches with buttons, in place of the Arduino pins, and got the same problems. Pushing 'clock' with no 'signal' does nothing, but pushing 'signal' then 'clock' turns on all the lights.
Is my finger's "rise time" not fast enough? Is it counting a single button push as a bunch of rises?
Now that I have it working with Arduino I guess I'm in good shape, but I'd like to understand why my circuit isn't working.