I have a very definite idea: the motors cause so much noise on the 5V power supply that the microcontroller gets continuously reset.
The AVR has a brownout detection which causes an internal reset when the supply voltage drops below a preset level.
The level is programmable, see table 28-4 in the datasheet. I wouldn't disable it, but maybe adjust the level.
decoupling!!
Decouple the controller properly: that's 100nF directly on pins 7 and 8. With a noisy +5V you can add a 1\$\mu\$F and a 10nF, the smallest one closest to the pins.
Decouple the motors, with 100\$\mu\$F across their connections.
Then, never connect your microcontroller directly to the same supply as a motor. Isolate them with diodes from your voltage regulator, and place a 100\$\mu\$F capacitor after the microcontroller's diode. If you don't like the diode's voltage drop (it will give you 4.3V instead of 5V) then add a diode between the voltage regulator's ground and ground itself. That will raise the output voltage to 5.7V, so that it compensates for the voltage drop across the other diodes.
Your reset circuit is also unusual. You have no control over the time constant. Most often you'll connect a capacitor from the reset pin to ground, and a resistor to Vcc.
edit
Rocket surgeon and Nathan already told you about the resistors for the transistors. At the moment there's only the internal resistance of the output MOSFETs which limits the base current. This resistance is only 25\$\Omega\$, so that you'll have 170mA from each output. That's certainly damage to your controller. Add a series resistor
\$ R < \dfrac{(5V - 0.7V) \times 400 }{I_C \times 2} \$
where \$I_C\$ is the motor's current, \$400\$ the current gain of the transistors, and \$2\$ a safety margin.