I haven't examined the circuit much yet, but one thing you'll have to be wary of is switch bounce. If you were to look at the voltage at the switch, instead of seeing a nice perfect square wave as you might imagine, what you'd actually will horrify you.
This is a real effect and happens on almost all switches. Assuming your circuit works, switch bounce will totally mess things up, because it will cause TPS_EN to toggle multiple times with every press of the switch.
What you need to add is known as a debounce circuit:
Having said all that, I think there's a better way to solve your problem, using fewer components.
You already have a microcontroller, so let that do all the hard work.
When you press S1, it causes Q1 to switch on, which powers the MCU. Immediately, the MCU raises the MCU_Signal line, which keeps Q1 switched on, even if you let go of the button.
From now on, the MCU keeps a watch on the Switch_Detect line. It will go high when the switch is pressed again. The MCU waits for the button to be released, then waits a further 100ms. This is to make sure the switch has really finished bouncing. Then the MCU lowers the MCU_Signal line, causing it to power off.
Added:
There's also the LTC2955 Pushbutton On/Off Controller which does the same thing.
Best Answer
It's a rocker, not a toggle, but this switch has a reset coil.
It has an 11\$\Omega\$ 5V coil that requires that you limit the on time to 50~100ms maximum on and at least 5 seconds off (2% duty cycle).