Looks like it was, indeed, the firmware. Specifically, the default firmware wasn't calibrating the ESCs correctly.
In case you're not familiar with the term ESC, it stands for Electronic Speed Control. You can think of them as gates for the voltage that goes to the motors. The power is distributed to the ESCs which then feed it into the flight control board. There is also a signal wire that goes from the flight control board back to each ESC, and this signal tells the ESC when and how much to open the throttle on a given motor. There is always an ESC per motor.
When I switched to the custom firmware, one which is basically the default with a lot of necessary bug fixes, I was able to calibrate the ESCs.
As a result, when I took the drone out for a quick test flight today (and one that was not more than 5 feet off the ground) I was able to achieve near stable flight. "Near" stable because it seems like there is a yaw setting that is off. As I flew more and more the quad would start to rotate counter-clockwise. Pushing the yaw clockwise did little to improve this.
However, all the props lit off at once. That's a huge improvement from what it was doing.
The only thing that concerns me is that, on one of the previous hard "landings" (perhaps controlled crash is a better term...) I buried motor 3 (back right in an "X" config) pretty hard. There is a visible amount of dirt crammed in the motor. I'm not sure how to get it out. This is a clockwise spinning motor, so if it's not turning at the appropriate RPMs the whole craft could rotate counter-clockwise.
I think... Gotta go look at that motor layout again...