I think the problem is due to the high currents that flow charging up the BJT input caps and MOSFET gate caps at the rising/falling edge. This high current getting pulled through the output resistance of the uC is causing a voltage drop. Remember voltages across capacitors cannot change instantly and some oscillations are unavoidable.
However, I think this problem could easily be solved by replacing the BJT stage with two common emitter inverter stages, with ~1k Ohm collector resistor on the first and the same or less (100 or so minimum) for the next stage. You would need two NPN BJT's and some resistors (values can vary a lot, just in the 1k then 500 range). From the uC to the base-input of the first BJT put some small sized resistor (around 200 Ohm or so).
simulate this circuit – Schematic created using CircuitLab
All this does is buffer the output through two inverters. Almost anytime you see a signal behaving normally when unloaded and have some droop or oscillations when connected to their load, you can be sure it is a 'loading problem'. This just means the output resistance of the original signal is low enough to drive the pin, but not the load you are trying to connect to it. So try a buffer! If the beta of the BJT's is 80+ it should saturate the output voltages at the rails.
Consider a switch to high at the uC output. Now the only capacitance seen by the uC is one base-emitter junction, and it's high transient spike is limited by the 200Ohm resistor. This high output turns the BJT on and causes the output node (collector) to drop to the saturation voltage (very low, maybe .2V). This in turn causes the 2nd stage to stop conducting, and the MOSFET gate is pulled up to VDD through the 500Ohm resistor. This charge/discharge speed can be set by the value of the output resistor. Lower values of resistance will cause a faster switch but also dissipate more power and cause larger transient spikes.
I will also say that maybe there isn't even a problem here. A small dip like that at the output is not low enough to turn off the LED. If you zoom in on any signal enough it will start to look dirty.