Известно, что охрана типа ptr(Type) даёт ошибку этапа выполнения, если ptr = NIL.

Подумалось, что лучше было бы разрешить эту операцию.
Значение NIL является совместимым со всеми типами, поэтому формально может быть приведено к любому типу.
Если дальше будет идти обращение к полю-методу ptr(Type).something - дык при селекции и ловить ошибку "NIL dereference".

Зато присваивание вида t := t.next(Type) было бы вполне корректным.
Замотало писать в полном проходе
IF t.next # NIL THEN t := t.next(Type) ELSE t := NIL END
Можно, конечно, t сделать базового типа next, и приводить в теле цикла через WITH - но всё равно лишняя конструкция...

По-моему, такое изменение семантики было бы даже полностью обратно совместимым.