I've designed a PCB to connect 12 TLC5940s to an 8x8x8 RGB LED cube through 3 64-pin headers, which I will include screenshots of below. I have a separate board for controlling the anodes for multiplexing, that's working fine and I've turned off the multiplexing for testing anyways. I have a 5V 20A switch-mode power supply for the whole thing, and I'm powering the TLC5940s through an LM317 regulator set for 3.3V, due to logic level of the STM32F4 Discovery I'm using to control the whole thing. I've put a 2.61k resistor on the IREF pin of each IC to set the constant current at ~15mA.
If I turn on just a few LEDs (no more than 8) at a time everything works fine, but if I turn on many of them the TLC5940s start going crazy. If I just turn on all the outputs of one, it works fine but the rest go crazy. With dot correction set to EEPROM (which has the default data of all 3Fh) they turn off all outputs and start drawing a lot of current on the supply pins, causing them to get rather hot. I have to disconnect and reconnect the power to fix this. If I set dot correction to the DC register and fill it with max values on startup, they just flicker at random brightness as if the DC register is getting scrambled, and don't draw a huge current. A simple re-initialization fixes them in this case, no power reset required.
I've poked around on the various signals with my oscilloscope, and they all look perfect. I even checked all the SOUT pins (since I have 12 of them daisy-chained) and the data is in fact being latched in correctly. The only thing I can think of is lack of proper decoupling, but I have 0.1µF ceramic caps on all the ICs, and some bulk decoupling (a couple 100µF electrolytic caps) on the separate anode control board. Is 0.1µF possibly not sufficient for the TLC5940? Based on the datasheet it seemed like it would be. I even tried poking 10µF and 100µF electrolytic caps in there, which had no effect. Even all the power pins of the ICs look clean on the oscilloscope. I'm really at a loss here.
By the way, the oscilloscope is a Rigol DS1054Z with the 100MHz bandwidth upgrade.
Here's the PCB layout: