I know this weeks old but I have the same questions.
The best idea I can think of is to write a python script that recognizes a GPIO interrupt from a momentary button that safely quits emulationstation, then quits other processes in the background, and lastly halts the CPU processes. The Halt command essentially puts the controller in low power mode and then the same script can recognize the opposite GPIO interrupt and wake the controller and boot emulationstation.
The Pi will always be on, but at least it would be drawing less power. Unless you’re looking for a full power off solution then the safest way is to use the Powerblock.
I will be trying this in the next couple weeks so hopefully I have more information but I don’t see why this wouldn’t work.