NOCHMAL zum MITLESEN.
Das Ändern des Labels löst ein Neuzeichnen dessen Canvas aus (TLabel und TImage haben aber kein eigenes Canvas, sondern leiten die Operationen an ihren Parent weiter)
Fazit: Die Form wird neu gezeichnet und schmeißt die Zeichenausgabe deines FEHLERHAFTEN Codes weg. (übermalt das wieder)
Label1.Caption:=... zeichnet nicht sofort, sondern verzögert, also nach deinem Code. (quasi PostMessage WM_PAINT)
Image.Canvas ist die "sichtbare" Zeichenfläche und Image.Picture.Canvas?, Image.Picture.Graphics.Canvas oder z.B. Image.Picture.Bitmap.Canvas ist der Canvas des internen Bildes.
PS: Rate mal was TImage mit dem Canvas der Oberfläche macht, wenn es das WM_PAINT bekommt.
In neueren Windowsen hat man zwar oft den Vorteil, daß sich der DesktopWindowManager (DWM) dazwischen klemmt, aber normaler Weise ist der Canvas des Fensters (und allem darauf) flüchtig.
CopyRect funktioniert, aber du vergisst bei einem Repaint der Form deine Ausgabe wieder herzustellen, bzw. du arbeitest auf der falschen Arbeitsfläche!