Проблема в округлении. Если выполнять процесс интерациононо ошибка может накапливается. 
Код:
procedure FixAngle;
var point, axis: TPoint;
 i:integer;
begin
axis.X:=250;
axis.y:=250;
point.x:=250-50;
point.y:=250;
for i:=0 to 360 do
  begin
  point:=RotatePoint(point,axis,Pi/180);
  Form1.Image1.Canvas.MoveTo(axis.X,axis.Y);
  Form1.Image1.Canvas.LineTo(point.X,point.Y);
  end;
end;
У Вас и есть тот лучай, когда она накапливается.
Из решений менять алгоритм.  Делать его неустойчевым к ошибкам.
Самое просто что приходит на ум использоваь числа с плавающей точкой. 
Но это полумера, числа в компьюторе иеют ограниченное число знаков. И при операциях с плавающей точкой они тоже округляются. 
И ошибка также и иначе будет вылазить.  Просто они бдут появляться реже! Так все создатели игр и делают.
Цитата:
Короче, либо считайте всё с плавающей точкой (при этом тоже может получиться спираль, правда с очень маленким шагом)
Даже небольшое округление может приводить к большим ошибкам.  К примеру выполните деление 

. 
Поэтому надо искать алгоритм на которого ошибки окргуления не будут влиять. К примеру тут можно изменять угол. 
Код:
procedure VarAngle;
var r,point, axis: TPoint;
 angle:Real;
 i:integer;
begin
axis.X:=250;
axis.y:=250;
point.x:=250-50;
point.y:=250;
angle:=0;
for i:=0 to 360 do
  begin
  r:=RotatePoint(point,axis,angle);
  angle:=angle+Pi/180;
  Form1.Image2.Canvas.MoveTo(axis.X,axis.Y);
  Form1.Image2.Canvas.LineTo(r.X,r.Y);
  end;
end;