Вы не можете сравнить эти два слова, потому что они описывают разные понятия.
Для меня слой - это нечто непрозрачное, которое предлагает некоторые функции, которые я могу использовать для выполнения каких-либо задач. Например, хороший аппаратный уровень для беспроводного передатчика просто дал бы мне функцию отправки и получения (например, на основе байтов), скрывая от меня все уродливые, уродливые детали.
Роль - это способ поведения объекта. Например, преобразование в одном из моих компиляторов будет принимать абстрактный синтаксис и возвращать абстрактный синтаксис, или привязка в моем текущем проекте будет принимать разницу состояний и возвращать специально измененную разницу состояний.
Однако, исходя из этих двух определений, я не вижу необходимости выбирать один «правильный» термин и сжигать другой как неправильный, потому что они мало конфликтуют. Часть слоя играет определенную роль, а набор объектов, соответствующих определенным ролям, образует слой. Конечно, контроллер формирует определенный слой между пользовательским интерфейсом и моделью (по крайней мере, для ввода), однако он также не играет роли - он превращает определенное событие в определенные другие события (и, таким образом, это своего рода адаптер).