Found it. Thanks.
My calculations were way off. This code looks like it could take up to about 2500 cycles and it's not isochronous. So, depending on row data, you may not get same amount of display "on" and "off" time for each row which could produce perceivable brightness variations.
Bravo! You've done an excellent job. Very cohesive, comprehensive, and elegant. I would do it differently (wouldn't everbody, grin) but it wouldn't necessarily be better then the way you did it.
Cheerful regards, Mike