А вот я не совсем понял. Сам только что столкнулся с этим.
Почему компилятор в (tn: TreeNode) SetData (data: ANYPTR) проглатывает переменную типа POINTER TO ..., а в  (tn: TreeNode) Data (): ANYPTR обязательно требует переменную ANYPTR? На мой взгляд, это нелогично.