Microcontroller incapable of driving MOSFET
I notice that you do not have a single decoupling capacitor in the schematic. Each time the MOSFET switches on or off, there can be some very high transient currents. If you don't have any decoupling capacitors, those transient currents will work against the resistance and inductance of the power rails and cause all sorts of problems like noise and resetting the MCU.

The MCU should have a 100nF capacitor or so. Also put another between the collectors of the push-pull stage.

Finally, think about where the current is flowing when you switch the transistor. There's a loop current flows through when you turn it off, and another loop when you turn it on:







simulate this circuit &ndash; Schematic created using CircuitLab

Adjust your layout to make these loops as small as possible. A smaller loop means a smaller inductance, and you want a small inductance to minimize the voltage variation when you create those transient high currents.

There's also a less obvious loop through the drain of M1. Remember that M1 has some capacitance, and as you turn it on or off some current must flow through M1 to change the voltage across that capacitance. It would be too messy if I drew all the arrows though, so just remember that Vcc is as important as ground, and keep all those connections short.