После долгих раздумий решил вертеть так:
Код AS3:
public function objRotate(angle:Number) : void{
var matrix:Matrix = bsMatrix.clone();
matrix.translate( -objLocRotatingPoint.x, -objLocRotatingPoint.y );// смещаем начальную матрицу на локальные коордиаты
matrix.rotate( (this.rotation+angle) * GL.RAD );// новое вращение = старое + доворот * Math.PI/180
matrix.translate( objGlobRotatingPoint.x, objGlobRotatingPoint.y );//смещаем начальную матрицу на глобальные коордиаты
this.transform.matrix = matrix;
}
Пусть и пришлось хранить в свойствах вращаемого объекта помимо глобальных координат точки вращения еще и его начальную матрицу и локальные координаты точки вращения, зато можно быть уверенным, что через несколько сотен тысяч вращений ничего и никуда не убежит и не сместиться.