I've just found what seems to be a fatal flaw in the design. The only way I've been able to connect all the peripherals to the Arduino Mega is through dupont wires. It worked fine during early small scale tests, but for some reason I can't get them to give a reliable connection now. I have to manually hold the plugs at just the right angle to get them to stay connected. I don't know if it's just a bad batch of wires or if I should be using something different or there's some trick to get them working reliably. If anyone has any advice on this I'd really appreciate it.
The photo below shows the state of the electronics just before the latest testing, the circuit just underneath the Arduino is a homemade 5v bus, mosfet and h-bridge board that most of the peripherals plug into for power.