diff --git a/core/modules/content_moderation/src/ParamConverter/EntityRevisionConverter.php b/core/modules/content_moderation/src/ParamConverter/EntityRevisionConverter.php
index 980c61e..9d97bcd 100644
--- a/core/modules/content_moderation/src/ParamConverter/EntityRevisionConverter.php
+++ b/core/modules/content_moderation/src/ParamConverter/EntityRevisionConverter.php
@@ -98,7 +98,7 @@ public function convert($value, $definition, $name, array $defaults) {
         $latest_revision = $this->entityManager->getTranslationFromContext($latest_revision, NULL, array('operation' => 'entity_upcast'));
       }
 
-      if ($latest_revision->isRevisionTranslationAffected()) {
+      if ($latest_revision instanceof EntityInterface && $latest_revision->isRevisionTranslationAffected()) {
         $entity = $latest_revision;
       }
     }
diff --git a/core/modules/content_moderation/src/Tests/NodeAccessWithGrantTest.php b/core/modules/content_moderation/src/Tests/NodeAccessWithGrantTest.php
new file mode 100644
index 0000000..82986f3
--- /dev/null
+++ b/core/modules/content_moderation/src/Tests/NodeAccessWithGrantTest.php
@@ -0,0 +1,162 @@
+<?php
+
+namespace Drupal\content_moderation\Tests;
+
+/**
+ * Tests permission access control around nodes with hook_node_grants().
+ *
+ * @group content_moderation
+ */
+class NodeAccessWithGrantTest extends ModerationStateTestBase {
+
+  /**
+   * Admin user.
+   *
+   * @var \Drupal\Core\Session\AccountInterface
+   */
+  protected $adminUser;
+
+  /**
+   * Permissions to grant admin user.
+   *
+   * @var array
+   */
+  protected $permissions = [
+    'administer moderation states',
+    'administer moderation state transitions',
+    'use draft_draft transition',
+    'use draft_published transition',
+    'use published_draft transition',
+    'use published_archived transition',
+    'access administration pages',
+    'administer content types',
+    'administer nodes',
+    'bypass node access',
+    'view latest version',
+    'view any unpublished content',
+    'access content overview',
+  ];
+
+  /**
+   * Editor user.
+   *
+   * @var \Drupal\Core\Session\AccountInterface
+   */
+  protected $editorUser;
+
+  /**
+   * Permissions to grant editor user.
+   *
+   * @var array
+   */
+  protected $editorPermissions = [
+    'use draft_draft transition',
+    'use draft_published transition',
+    'use published_draft transition',
+    'use published_archived transition',
+    'view latest version',
+    'view all revisions',
+    'view any unpublished content',
+  ];
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = [
+    'content_moderation_test_grants'
+  ];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+    $this->adminUser = $this->drupalCreateUser($this->permissions);
+    $this->editorUser = $this->drupalCreateUser($this->editorPermissions);
+    $this->drupalLogin($this->adminUser);
+    $this->createContentTypeFromUi(
+      'Moderated content',
+      'moderated_content',
+      TRUE,
+      ['draft', 'published'],
+      'draft'
+    );
+    $this->grantUserPermissionToCreateContentOfType($this->adminUser, 'moderated_content');
+    $this->grantUserPermissionToCreateContentOfType($this->editorUser, 'moderated_content');
+
+    // Rebuild permissions because hook_node_grants() implemented.
+    node_access_rebuild();
+  }
+
+  /**
+   * Verifies that a non-admin user can still access the appropriate pages.
+   */
+  public function testPageAccess() {
+    $this->drupalLogin($this->adminUser);
+
+    // Create a node to test with.
+    $this->drupalPostForm('node/add/moderated_content', [
+      'title[0][value]' => 'moderated content',
+    ], t('Save and Create New Draft'));
+    $nodes = \Drupal::entityTypeManager()
+      ->getStorage('node')
+      ->loadByProperties([
+        'title' => 'moderated content',
+      ]);
+
+    if (!$nodes) {
+      $this->fail('Test node was not saved correctly.');
+      return;
+    }
+
+    /** @var \Drupal\node\NodeInterface $node */
+    $node = reset($nodes);
+
+    $view_path = 'node/' . $node->id();
+    $edit_path = 'node/' . $node->id() . '/edit';
+    $latest_path = 'node/' . $node->id() . '/latest';
+
+    $this->drupalLogin($this->editorUser);
+
+    // Ensure access works correctly for editors users.
+    $this->drupalGet($edit_path);
+    $this->assertResponse(200);
+    $this->drupalGet($view_path);
+    $this->assertResponse(200);
+    // There is not yet latest revision.
+    $this->drupalGet($latest_path);
+    $this->assertResponse(403);
+
+
+    // Publish the node.
+    $this->drupalPostForm($edit_path, [], t('Save and Publish'));
+
+    // Ensure access still works correctly for editors users.
+    $this->drupalGet($edit_path);
+    $this->assertResponse(200);
+    $this->drupalGet($view_path);
+    $this->assertResponse(200);
+    // There is not yet latest revision.
+    $this->drupalGet($latest_path);
+    $this->assertResponse(403);
+
+    // Create a forward revision for the 'Latest revision' tab.
+    $this->drupalLogin($this->adminUser);
+    $this->drupalPostForm($edit_path, [
+      'title[0][value]' => 'moderated content revised',
+    ], t('Save and Create New Draft'));
+
+    $this->drupalLogin($this->editorUser);
+
+    $this->drupalGet($edit_path);
+    $this->assertResponse(200);
+    $this->drupalGet($latest_path);
+    $this->assertResponse(200);
+    $this->drupalGet($view_path);
+    $this->assertResponse(200);
+
+  }
+
+}
diff --git a/core/modules/content_moderation/tests/modules/content_moderation_test_grants/content_moderation_test_grants.info.yml b/core/modules/content_moderation/tests/modules/content_moderation_test_grants/content_moderation_test_grants.info.yml
new file mode 100644
index 0000000..825c861
--- /dev/null
+++ b/core/modules/content_moderation/tests/modules/content_moderation_test_grants/content_moderation_test_grants.info.yml
@@ -0,0 +1,8 @@
+name: 'Content moderation test grants'
+type: module
+description: 'Implements hook_node_grants() for testing.'
+package: Testing
+version: VERSION
+core: 8.x
+dependencies:
+  - node
diff --git a/core/modules/content_moderation/tests/modules/content_moderation_test_grants/content_moderation_test_grants.module b/core/modules/content_moderation/tests/modules/content_moderation_test_grants/content_moderation_test_grants.module
new file mode 100644
index 0000000..1b71c19
--- /dev/null
+++ b/core/modules/content_moderation/tests/modules/content_moderation_test_grants/content_moderation_test_grants.module
@@ -0,0 +1,15 @@
+<?php
+
+/**
+ * @file
+ * Contains content_moderation_test_grants.module.
+ */
+
+use Drupal\Core\Session\AccountInterface;
+
+/**
+ * Implements hook_node_grants().
+ */
+function content_moderation_test_grants_node_grants(AccountInterface $account, $op) {
+  return [];
+}
