A few ideas based on my real-world experiences with this type of design.
A. The solutions divide themselves into three classes:
Class I: Using an external circuit to control battery power to the micro.
Class II: Using the micro itself to control power to itself. E.g. Sleep Mode invocation and exit.
Class III: A hybrid of Class I and Class II. E.g. Turning on the micro with an external circuit or device (e.g. a momentary push button), then turning off the power using a facility of the micro (e.g. a GPIO pin).
There are downsides to each approach. Class I schemes draw battery power constantly, however miniscule. This is also the case for Class II schemes. Depending on the actual microprocessor and the cleverness of the circuitry, Class III schemes are fraught with problems because it is not a trivial matter to un-power a micro using its own resources.
Also, consider the actual impact of a tiny constant current draw on battery life. Some batteries can sustain a certain very low current draw without serious impact on their shelf life. Some battery spec sheets will contain this information, or at least hint at it. You can easily experiment with this by connecting high-value resistors across the candidate battery, let it operate like this for a long period while testing its voltage briefly every day or two.
You will also need a credible, reliable and accurate way of measuring sub micro-amp currents to determine the actual current draw of your circuitry. Most low cost DVMs do not do a good job with this. A cheap solution is an old-fashion electro-mechanical "galvanometer". Calibrate it using series high value resistors and a voltage supply.
Most low-power products use Class-II because of low parts count, cost, simplicity and known design issues (usually found in data sheets and application notes). With the right combination of battery and micro, this is probably as good as you can do without a lot of design and debug headaches. "As good" = reasonable battery life. However, I believe you can improve on this with a carefully thought-out and implemented Class I circuit of the type described in the article cited by ursusd8.
If you are up for a real challenge you should pursue the Class III approach you allude to in your question. You will likely find that turn-on is reliable, but that turn-off can create all sorts of unintended results. The typical problem is that the micro will manage to turn itself back on again as its supply voltage is dropping. This happens because for this brief period of time (while the supply voltage is collapsing), the micro is operating outside of its specified operating voltage range - the voltage range within which it was originally designed to operate properly. (E.g. How many micros are specified to operate at less than one volt?) Perform some basic experiments with your selected micro and power switch hardware (MOSFET, etc.) before you get too committed to the selected micro. Be prepared to learn more than you ever wanted to know about micro-processor data sheets and what they don't tell you about operation under marginal power conditions.
If you are looking for the absolute best low-drain solution, I think you will find it in Class I. However, be prepared to perform a lot of experiments with different devices, be equipped with a proven current measurement capability, and verify results with the selected device having different date codes because leakage currents of discrete logic devices vary significantly from piece-to-piece and production run-to-production run.
setup()
function, which shows a delay of about 20us between the rising edge on CH_PD and the GPIO going high. \$\endgroup\$