How to use MOSFETS for single-button on-switch and input signal to microcontroller
The easiest circuit uses a signal level N-channel to pull a power P-channel gate low. The signal-level gate can then be left floating, and be pulled low by a MCU that wants to turn off itself. I've used this myself, and it works reasonably well. There's an intermediate state where there is still power in the filter capacitors after the P-channel switch, but the P-channel is currently on, where the brown-out detect of the MCU will reset it, so you really want the MCU to be active-keep-on instead of active-turn-off. The first thing the MCU does is pull the pin high, and then keep it that way, until it comes time to turn it off.



Note that there will be some current through R5 while on; typically you'd want to take advantage of this for an "ON" LED indicator or something to avoid it going to waste.
VSW will default "off" because of R5 pulling the gate of the P-channel power MOSFET high.
Pressing ON will turn on the power by pulling the gate of the N-channel high, which in turn turns the gate of the P-channel low.
The MCU is assumed to be powered indirectly by the VSW voltage and turn CTL high as soon as it starts. Turning CTL low will turn off the power (VSW).

If you stay below 15V input, then the Zener diode is not needed.
If you use more than 20V in (or whatever the VGS of the P-channel MOSFET is) then you will need some circuitry to limit the negative voltage that the P-channel gate sees, such as another Zener. Gates are typically quite voltage sensitive.