I think AVRCP did not define how the media applications should act, it's a protocol so it should just define what are the possible commands for play and pause actions, and "play", "playpause" and "pause" are those commands. I have talked to Gina(the gecko AVRCP owner) about this, if one bluetooth device send "play" and "pause" commands clearly, the device should has maintain it's own play status and knows what's the correct commands it should send, basically depends on the A2DP connection, the received play status or actively request the play status, and for those devices that did not keep or request the play status(probably AVRCP 1.0 devices), they will just send "playpause" and let the application to decide it should play or pause.

For the IAC commands, I think we should send "play" and "pause" commands because it should be able to keep the play status, and request the play status at the timings it should(haven't check the whole patch yet but I guess you already did), so if we want to fire a separate "playpause" for REMOTE_CONTROLS.PLAY_PAUSE, we should make sure the IAC keep the right play status and send correct commands base on it.