Похожая беда тут уже обсуждалась...
Совсем не уверен (т.к. обычно всё оказывается гораздо проще, чем я думаю), но каким-то органом чувствую, что весь EVAL код в PHP выполняется в отдельном адресном пространстве, т.е. как самостоятельный скрипт, а не часть того кода в котором вызывается EVAL.
Это предположение всё объясняет: код «@EVAL return $modx->documentObject[’parent’];» не может в принципе знать, что такое $modx и поэтому (и естественно) не работает.
runSnippet неработает потому же, что documentObject — объект $modx не существует там, где выполняется EVAL.
P.S. Создать его там – идея мягко говоря не из лучших