This logic confuses the hell out of me. No matter how long I stare at it, it always seems incorrect, and yet the behaviour is right. Would you mind changing it to something more explicit? Perhaps this:

		if (Pi::DrawGUI && m_labelsOn) {
			m_labelsOn = false;
		} else if (Pi::DrawGUI && !m_labelsOn) {
			Pi::DrawGUI = false;
		} else if (!Pi::DrawGUI) {
			Pi::DrawGUI = true;
			m_labelsOn = true;
		}

The tests are duplicated because I think it makes the sequence clearer to explicitly define the preceding state.