Relevant code:
Vector3 cameraRelFaceDir = Vector3.ProjectOnPlane(camera.forward, transform.up).normalized;
float anglePlayerForwCameraForw = Vector3.SignedAngle(cameraRelFaceDir, transform.forward, Vector3.forward);
Debug.Log("angle: " + anglePlayerForwCameraForw + ", transf up: " + transform.up + ", transf forw: " + transform.forward + ", camera rel dir: " + cameraRelFaceDir);
This clearly shows that it changed sign between two frames.
(The image doesn’t seem to show up correctly so here’s the link: debug-out hosted at ImgBB — ImgBB)