The problem was related to the cross server synchronization during block calculations. Block calculations are done by a script which checks for new blocks once per minute. At one point tonight, we had two blocks solved between the script running due to a 40-second block. This caused a problem in the synchronization code, causing it to exit.
When the calculations are performed, the code sets a "lock" in the database telling it that a reward is being calculated, so that if it were to get stuck due to interserver connection problems, it would not have another instance of the script run and potentially duplicate the work. Since the code exited due to a synchronization problem, this lock did not deactivate, and the automatic block allocations were halted until I manually restarted them.
This is a problem I will work on fixing this weekend. It's a result of the code becoming much larger due to the integration of 3 servers with the pool, something it was not originally designed for.
Magic, got it.