Probablemente el error se presenta al llamar la función ProcessMessages en intervalos tan reducidos de tiempo.
Te propongo espaciar las llamadas para que en lugar de hacerlo en cada ciclo se hagan cada 400 ciclos por poner un ejemplo, el número lo decides tu mismo.
Quedaría algo como esto:
Código Delphi
[-]
for itemId := 100 to ItemCount - 100 do
begin
if itemId mod 400 = 0 then application.ProcessMessages;
SetItem(itemId-100, ReadItem(itemId));
end;
Saludos