Thanks! I should have thought of that solution, rather than the quick hack I did.
I figured out the problem with RLGL, but not the answer. I looked at the schematics some more, and noticed that the LED transistors are PNPs; that means the bases must be low for the LEDs to light, so L is active low. I inverted the data in write_l, and the stop and go LEDs started flashing like they should, but a couple of other LEDs also lit up. I thought some more, and figured out it was the LEI fix for EN2=0; the L outputs shouldn't be set low, they should be high impedance. Because the LEDs in RLGL are active low, setting the L outputs low was turning on a bunch of LEDs.
I tested by changing the LEI fix code to set L to 0xff instead of 0 when EN2=0 and that did make RLGL work. Of course it breaks other games (but I should check to see if it makes Basketball work without the other hack).
I'm not sure if there is some kind of tri-state variable to use, or if it would be best to have an active state flag (probably a vector, since each L output could be different) and set L to that value instead of 0 when EN2=0.