Turns out the default behavior of linedef action 420 (Fade Light Level) only properly handles increasing the light level: if the destination light level was lower than the starting light level, the fading timer would become negative, causing the light level to instantly change.