A bone with a limit rotation constraint doesn't rotate on a plane. Why?
Constraints don't operate on raw transforms. They operate on transforms that are converted to matrices and then back to Eulers for evaluating the constraint. But Eulers alias-- there exists more than a single set of Eulers to describe any particular orientation. Consider how 180, 0, 0 is the same rotation as 0, 180, 180. Or consider how we have 360 degrees of longitude but only 180 degrees of latitude. So the Y rotation you get out is not necessarily the Y rotation you put in. This makes limit rotation (and copy rotation) among the most dangerous of all constraints to use.
What to do? One option is to change the orientation of your bone so that you can limit its local X rotation instead. Blender is designed to make it so that the XYZ Eulers you get out of the transformation matrix are the same, for the local X axis, as the Eulers you put into an XYZ Euler bone.
Another option to limit rotation is to use a locked track constraint instead. This requires several additional bones. First, a marker bone, parented to your original; a duplicate of your original, which locked tracks this marker bone; and perhaps a pair of bones, which can be targets of floor constraints for your marker bone, to limit its world space position such that it can only ever exist in a particular world-space quadrant of its parent. Sounds complicated? It's more complicated than it should be, I'll grant that.