If you have a single on/off button that means the device's power on/off code is a toggle. If it is on and you press power, it turns off. If it is off and you press power, it turns on. That creates havoc for macros. What if you want a macro to switch to the dvd input and turn on the dvd player but the dvd player is already on - when the power command for the dvd player is sent it will turn off and now you are out of sync.
The Harmony remotes try to remember the state of each component. So in the above example, if its state is on, the remote won't send it the power code. It's very easy to get out of sync anyway. Like if you move the remote before all the commands are sent or someone walks in front of the beam. That's why the Harmony includes 'help' where you can manually tell it the state of each of the devices so it can update its internal state. It's a hack.
The solution to all of this is discrete codes - one code, one command. If you have discrete on and off, then when the device is on and you send it an on, it does nothing because it is already on.
Having separate on/off buttons on the remote is to accomodate discrete power codes. My remote is programmed with a system on macro that turns everything on (the 'on' button) and another to turn everything off (the 'off' button). Likewise, my macro to switch from cable to dvd will not turn off the dvd player if it is already on because the player has discrete on and off commands, just like the receiver.
If you only have toggle power codes, just program both on and off with the same power code. It doesn't really matter because when the system is on you can press the on button to turn it off anyway.