Почему может возникать Invalid pointer operation в Pascal?
Скорее всего все так и есть: дважды вызов "очистки" на одном объекте.
p.s. возможно причина в том что данный объект присваивался к одному и из элементов списка, который очищался перед очисткой данного объекта, то есть объект вроде как существует, а данные уже нетИменно так.
Имеет смысл воспользоваться функцией FreeAndNil внутри реализации FreeObject.