Code:
  rotation.x := (rV.x * tween) + rotation.x * (1 - tween);
  rotation.y := (rV.y * tween) + rotation.y * (1 - tween);
  rotation.z := (rV.z * tween) + rotation.z * (1 - tween);
you are again interpolating the angles, only doing it manually this time instead of using a d3dx function.
ok I suppose I have to explain why that is bad. as (I assume) you know arctan2 gives you an angle between
-Pi and Pi, and you store these angles in your rotation variable. every time you adjust your camera you get a
new angle and you interpolate between the old rotation variable and the new rV variable. the values that you
interpolate are angles (-Pi..Pi). so here's an example of the major issue with angles: what if the old angle is
-0.9 * Pi and the new angle is 0.9 * Pi? the actual angular difference here is only 0.2 * Pi but if you
numerically interpolate between these angles by a step size of 0.5 (for example) you will end up exactly at 0!
while you expect to be at Pi, so your camera will turn exactly in the opposite direction.

as I have said before, you should instead interpolate the direction vectors of the camera. the easiest way to
do that is to store the current direction vector and the new direction vector, interpolate between them and
extract your angles from the result. but since I see that you are trying to only deal with the angles you should
simply convert the rotation variable angles into a vector, interpolate it with the diff vector then extract the
angles from the result.

ok at this point if you need more help I can give you the code that will simply work. but that would be no fun would it