Потому что, как и мой первый вариант, он вращает правильно всего 1 раз.

Код AS3:
public static function rotateImageAroundCenterOfViewPort(image:Image, value:int):void
{
var bounds:Rectangle = image.getBounds(image.parent);
trace("rotation Begin: bounds.x ", bounds.x, " bounds.y: ", bounds.y);
// Calculate rotation and shifts
var shiftByX:Number;
var shiftByY:Number;
// Perform rotation
shiftByX = image.parent.width / 2 - bounds.x;
shiftByY = image.parent.height / 2 - bounds.y;
var matrix:Matrix = image.transform.matrix;
matrix.translate( -shiftByX, -shiftByY);
matrix.rotate( -image.rotation * DEG_TO_RAD);
matrix.rotate(value * DEG_TO_RAD);
matrix.translate(shiftByX, shiftByY);
image.transform.matrix = matrix;
}
Ыот во что он превратился у меня. Проблема в неверном вычислении точки поворота (т.е. с точки зрения смотрящего на экран - она верная, с точки зрения компонента - нет). Эту проблему я решил выше "свитчем", но возникла новая - с погрешностью.