This is the way animation work when you add a keyframe you store the variables values (loc, Rot, Scale) at that time, and when you play the animation blender try to interpolate ( guess ) the values of the variable (between keyframes ) depending on the last and next value and the type of interpolation used (this can be seen in the F-curve )
so whatever happens between keyframes is lost and new value will be calculated
in this case of the bone
- the location of the bone is the location of its head
- the bone will rotate around its head
in this example i keyframed the first and last states only :
the result motion :
the bone will follow straight path from the first pose to the last (blender can't regenerate the original motion from those two states only) while rotating around its head
To prevent this you can :
- add more intermediate keyframes.
- or use an empty as a parent at the center of rotation.
- or use curve as guide for the motion