Los objetos en delphi realmente son punteros. Esto quiere decir que cuando realizas
Código Delphi
[-]tabla[Length(tabla)-1] := lista;
estas apuntando con las dos variables a la misma posición en memoria, y en consecuencia al liberar uno, estas liberando el otro.
La solución es no borrar los items de lista, sino crear una nueva lista:
Espero que lo hayas entendido,
un saludo.