Vaya problema, no estoy 100% familiarizado con la clase, pero me pregunto; si le pones un Resume funciona? otra cosa... estas en una sección crítica, lo que significa que no entrará al proceso hasta salir, sin embargo
FreeOnTerminate := True
El consejo que te podría dar es el siguiente; la forma en que solucionaste el problema esta buena... una cola de rutas; la idea es la siguiente, el hilo hace su trabajo sin terminar hasta que finalice la aplicacion, cuando hay algún dato en la cola, pues lo procesa y lo borra y continua... algo como ésto:
Código Delphi
[-]
repeat Sleep($7F);
if frmPrincipal.lbRespaldosCola.Count <> 0 then
begin
ruta := frmPrincipal.lbRespaldosCola.Items[0];
...
frmPrincipal.lbRespaldosCola.Delete(0);
end;
until Application.Terminated;
y en el hilo principal lo único que haces en añadir un dato a la cola, el hilo se encargará de procesar cuantos hayan.
Saludos