Как я это структурировал для себя.
MVC: доступ к данным (Model) есть у View и у контроллера. То есть View может перерисовываться самостоятельно лишь на основании изменения данных в Model или взаимодействия пользователя с View (нажатие на экран), или сама изменить данные в Model; и только сообщить контроллеру об этом. Controller может изменять состояние View на основании своих источников данных (напр. внешние запросы, нажатие на кнопку) и тоже может менять Model.
MVP: Presenter является посредником между View и моделью. View и модель меняются данными через установленное API. Отображение во View зависит только от данных, которые установил Presenter.
MVVM: ViewModel также является посредником между View и моделью. Но ViewModel не может напрямую воздействовать на View, а лишь является источником данных и имеет возможность через функции вызова передавать актуальные данные. То, что отображать, определяется на уровне View.