The answer to all my woes, dear friends, was simply to stop being a wasteful wasteful programmer. (I was maxing out onboard ram)
Since each row is 8 LEDs, there's no reason for each row to have an array of 8 bytes. Instead, each row should be handled by 8 bits, aka 1 byte.
My new maximum number of frames is around 120 (actual number has not been determined). Way better than the 14 I was limited to before.