У вас при регистрации custom post type стоит
'capability_type' => 'page',
. Это генерит capabilities вида "edit_pages", "publish_pages" и тд. А при создании роли вы указали "edit_posts", "publish_posts". Capabilities разные.
И вообще, если уж регистрировать custom post type с мыслью о дальнейшем контроле доступа, то генерите свои произвольные capabilities, в данном примере это будет "'capability_type' => 'estate',", далее назначайте эти capabilities нужным ролям. Почитайте еще про map_meta_cap.
Именно ролями с корректно выставленными capabilities можно контролировать что юзер может делать в админке, а что нет. С помощью remove_menu_page( 'plugins.php' ); вы только убираете ссылку из меню, сама страница остается и она доступна. Зайдя по ее прямому адресу пользователь все равно сможет админить плагины. Огромная дырка тут у вас :) В документации же черным по белому написано:
Please be aware that this would not prevent a user from accessing these screens directly. Removing a menu does not replace the need to filter a user's permissions as appropriate.
Правильный способ закрыть юзеру доступ к определенным фичам - убрать у него соответствующую capability, в случае с плагинами это будет:
- activate_plugins
- delete_plugins
- edit_plugins
- install_plugins
- update_plugins
Полный список ролей и их capabilities
есть в документации.
В общем, вам обратно за парту надо. Разобраться в тонкостях roles и capabilities, map_meta_cap и тд. Иначе вы соберете франкенштейна.