Причина осталась неизвестной, но решением оказалось пересоздание tprocessutf8 после каждого цикла обработки
cmd:=tprocessutf8.Create(nil);
cmd.Executable:=mydir+'\magick.exe';
cmd.Options := cmd.Options + [poWaitOnExit] + [poNoConsole];
cmd.Parameters.Add('"'+imgname+'" -crop '+inttostr(cs)+'x'+inttostr(cs)+'+'+inttostr(cx)+'+'+inttostr(cy)+' "'+inttostr(t)+'temp1.jpg"');
cmd.Execute;
/*тут еще несколько операций над картинкой*/
cmd.Free;
upd
похоже причина была в необнулении переменных но проверять уже не буду