По поводу твоих вопросов:
1. однозначно нельзя (не VAR параметр не может участвовать в присвоении слева)
Там речь не о VAR параметре, а об указателях. Если смотреть prior art - то "константный указатель" (не-VAR массив/рекорд) и "указатель на константу" (нет такого в обероне) совсем разные вещи. По константному указателю менять объект можно (C++).
2. В целом присвоение таким переменным возможно, но не для параметров процедур.
Просто надо нормально прописать ссылки, чтоб не скакать по репорту в догадках.
3. В данном случае строка является выражением, которые допустимы как формальный параметр процедуры.
В репорте про это - ни слова. И вообще с описанием "что такое строка" очень плохо.
4. Недопустимо, открытые массивы могут существовать только в форме параметров процедуры, чтобы в них можно было передавать массивы разной длины. Создать же открытый массив нельзя (и присвоить ему тоже).
А вот ребята на другом форуме (ссылка пробегала) думают с точностью до наоборот.
5. В присвоении участвуют переменные одного типа. ARRAY 4 OF CHAR и ARRAY 8 OF CHAR - разные типы, но копирование между ними должно существовать (можно написать цикл, но процедура COPY рассматривается как низкоуровневая реализация такого цикла).
Процедура COPY рассматривается (буквально) как "v := x". Все. Почему и возник вопрос - может она таки чем-нибудь отличается от такого определения (например, копирует массивы разных размеров и если да, то как). В своем компиляторе я ее таки реализовал (из любви к букве репорта), но делает она именно то, что прописано в репорте - v := x.