Der Canvas speichert nichts. Heißt, immer wenn das Control angezeigt wird, wird das Ereignis OnPaint aufgerufen, damit du dann alles zeichnen kannst, was notwendig ist. Wird z.B. die Form durch ein anderes Fenster verdeckt, und dann verdeckte Bereiche durch Verschieben der verdeckenden Form wieder sichbar gemacht, wird erneut das OnPaint aufgerufen.
Probiers mal aus, dass du deine OnPaint-Routine nur einmal durchlaufen läßt, und danach (über irgendein Bool) halt nicht mehr. Dann schau mal was passiert, dann verstehst du das ganz fix.
Hab ich grad mal gemacht, zeichnet nichts....
Kommentiere ich mal alles aus und zeichne einfach nur eine Linie von a nach b, klappt das, kann das sein, dass er irgendwie die Arraylänge nicht hat ???