Vamos a suponer que algo falla justo en la línea que hace
dm.DB.Commit;, entonces las líneas posteriores no se ejecutarán y saltará a la sección de
except, luego entonces aunque se ejecuta el RollBack no llegas nunca al CommitUpdates que es quien se encarga de limpiar el cache, por lo tanto el archivo temporal no se eliminará.
Espero que sea de utilidad, hace mucho que no uso tablas con actualizaciones en cache
Saludos