Also beim ersten Durchlauf gibt's bei mir eigentlich keine
Exception. Beim zweiten allerdings schon und zwar weil du dann schlicht und einfach jetzt zum zweiten mal versuchst (was aber eben nur einmal geht) das in list.Items[0] gepointete Objekt freizugeben (unabhängig davon, dass man das bei Objekten ja eigentlich gar nicht mit 'Dispose' machen kann, sondern dazu das Free bzw. deren Destructor benötigt).
(das unter der Annahme, dass du zum New(Pointer) auch ein Dispose(Pointer) am Ende deines Codes mit angefügt hast).