Where are Blender 2.79 and later rigid body constraint angular limits documented?
OK, so I didn't find any Blender specific documentation for this and ended up looking at the python code for:
bpy.ops.rigidbody.constraint_add() bpy.context.object.rigid_body_constraint.type = 'HINGE' bpy.context.object.rigid_body_constraint.object1 = bpy.data.objects[&quot;ObjectA&quot;] bpy.context.object.rigid_body_constraint.object2 = bpy.data.objects[&quot;ObjectB&quot;] bpy.context.object.rigid_body_constraint.use_limit_ang_z = True bpy.context.object.rigid_body_constraint.limit_ang_z_lower = -0.785398 bpy.context.object.rigid_body_constraint.limit_ang_z_upper = 0.785398
and the Blender and Bullet C code.
Observations:

Adding a Blender HINGE constraint, ultimately calls the Bullet function to create a HINGE constraint and not a GENERIC as previously suspected.
Looking at the Bullet create function and reading Bullet forum posts, the  constraint is set up relative to the frame (local transform) of the second Object passed to the function. You can override this behaviour and set up the constraint  relative to the transform of the first object, using a boolean flag. Blender sticks with the default, so the constraint transform is relative to Object 2.
Looking into the &quot;set angular limit&quot; function, there is a normalisation of the limit range mid point between -2PI and 2PI, so excessively large limit angles just get pulled back into the range -360 to 360 degrees.

What this means in plain terms is:

Limit angle &quot;zero&quot; is local x axis of objectB
+ve Upper Limit is in anticlockwise direction, when looking along the constraint's local +ve Z axis from the origin
-ve Lower Limit is in clockwise direction, when looking along the constraint's local +ve Z axis from the origin
The orientation of the constraint's local X and Y axis doesn't affect the joint's rotational range.

This is probably hard to visualise, so I've included a picture with 3 scenarios.

Top left is the starting set-up. Note the direction of the central constraint local Z axis.
Bottom left has the constraint local transform rotated 180 degrees around the local X axis, so the local Z axis now points towards the view. Upper and lower limits now flip.
Finally the image on the right is the same as the top left but Object B (2) to rotated downwards by 45 degrees and the limits move relative to this.


Ultimately, what was confusing me, was the fact that the limit angle range &quot;zero&quot; is defined by object 2 and not the orientation of the constraint itself.
I assume a similar set-up will apply to the other Bullet constraints, notwithstanding the axes of rotation may be different.
Cheers.