It IS because of the Euler angle system. I won't go too deep into expaining it, but Euler angles work in sets. The final rotation is dependent on the combination of an X rotation, then a Y rotation, then a Z rotation (in that specific order). It isn't a bug but it is hard to understand. That is how my addon for Dark Basic Professional, EZrotate, was born.
Anyway, here is something that you can do to help solve your problem. If you are really only dealing with rotations on the Y axis, then you can simply store the current angle in a variable which can be called later. For example:
Outside of your loop:
TurnAngle# = 1.0
CurrentYangle# = 0.0
Inside your loop:
if Rightkey() = 1
CurrentYangle# = WRAPVALUE(CurrentYangle# + TurnAngle#)
endif
if Rightkey() = 1
CurrentYangle# = WRAPVALUE(CurrentYangle# - TurnAngle#)
endif
ROTATE OBJECT carObj, 0,CurrentYangle#,0
ROTATE CAMERA , 0,CurrentYangle#,0
I hope this helps!