Automatically flip a player game object upright on z axis?

So I’ve been working on a flight sim using arcade physics. I’d like to have the player roll on the z-axis back to 0 if the player flips upside down.

The ship currently stays upright when it turns using yaw controls (x-axis), but when it flips upside down using pitch controls (y-axis) it stays upside down. I can detect when the player is upside down, but I’m having trouble figuring out how to correct this.

I’ve looked all over the unity community, and tried several different approaches, but I can seem to get this working right. Anyone have any suggestions?

public class PlayerCon : MonoBehaviour {

	private Rigidbody  rb;
	private float speed = 15.0f;
	public float tilt = 10.0f;
	private float moveHorizontal = 0.0f;
	private float moveVertical = 0.0f;
	private float tiltHorizontal;
	private bool upSideDown = false;

	void Start(){
		rb = GetComponent<Rigidbody>();
	}

	void FixedUpdate(){

		moveHorizontal = Input.GetAxis ("Horizontal") + moveHorizontal;

		tiltHorizontal = Input.GetAxis ("Horizontal");
		
		moveVertical = Input.GetAxis ("Vertical") + moveVertical;
		
		rb.transform.position += transform.forward*speed*Time.deltaTime;

		//player can rotate from side to side, up and down, and tilts a little when using yaw contols
		rb.rotation = Quaternion.Euler (moveVertical, moveHorizontal, tiltHorizontal * -tilt);  


		if (Vector3.Dot (transform.up, Vector3.down) > 0) {
			Debug.Log ("upside down");  //what can i do here?
		} else {
			Debug.Log ("right side up");
		}
	}
}

I know this has been a long time coming, but I did this…

        //roll upright
        if (AutoRoll)
        {
            Vector3 unitRight = transform.position + transform.right;
            Roll(-unitRight.y + transform.position.y);
        }

... and the Roll Function...

    private void Roll(float Amount)
    {
        rigidBody.AddRelativeTorque(0f, 0f, Amount);
    }