Since OpenNI doesn't provide meaningful skeletal data for the head, using a motion database won't really help.
Instead, you'd need to go back to the segmented depth map. The head's rough location can be found using the OpenNI skeleton. From there you'd need to cull out the rest of the body, largely by rejecting any pixels that aren't within a head-sized sphere of the head location. You would then compute the centroid of the head in the depth map. This should be much more stable than the head bone reported by OpenNI. You could draw a line from the midpoint of OpenNI's shoulders to the head centroid and that would give you the head "roll". Computing all three axes will be tough unless you look for color stream features like the eyes, nose, and mouth.
More advanced algorithms have been described at:
Shaun