diff --git modules/node/node.module modules/node/node.module
index 42a20dd..c9d8be7 100644
--- modules/node/node.module
+++ modules/node/node.module
@@ -524,9 +524,13 @@ function node_type_save($info) {
       ->condition('type', $existing_type)
       ->execute();
 
+    // Clear the node type cache.
+    drupal_static_reset('_node_types_build');
+
     if (!empty($type->old_type) && $type->old_type != $type->type) {
       field_attach_rename_bundle('node', $type->old_type, $type->type);
     }
+
     module_invoke_all('node_type_update', $type);
     $status = SAVED_UPDATED;
   }
@@ -536,14 +540,18 @@ function node_type_save($info) {
       ->fields($fields)
       ->execute();
 
+    // Clear the node type cache.
+    drupal_static_reset('_node_types_build');
+
     field_attach_create_bundle('node', $type->type);
 
     module_invoke_all('node_type_insert', $type);
     $status = SAVED_NEW;
   }
-
-  // Clear the node type cache.
-  drupal_static_reset('_node_types_build');
+  // Make sure the administrator has permission to this node type. This is done
+  // here because modules may not implement node_type_insert or node_type_update
+  // hooks.
+  user_administrator_grant_permissions();
 
   return $status;
 }
@@ -627,10 +635,11 @@ function node_type_delete($type) {
     ->condition('type', $type)
     ->execute();
   field_attach_delete_bundle('node', $type);
-  module_invoke_all('node_type_delete', $info);
 
   // Clear the node type cache.
   drupal_static_reset('_node_types_build');
+
+  module_invoke_all('node_type_delete', $info);
 }
 
 /**
@@ -2902,7 +2911,6 @@ function node_list_permissions($type) {
  *   An array of node types managed by this module.
  */
 function node_permissions_get_configured_types() {
-
   $configured_types = array();
 
   foreach (node_type_get_types() as $type => $info) {
diff --git modules/user/user.module modules/user/user.module
index 4585a56..e962621 100644
--- modules/user/user.module
+++ modules/user/user.module
@@ -3573,18 +3573,7 @@ function user_register_submit($form, &$form_state) {
  */
 function user_modules_installed($modules) {
   // Assign all available permissions to the administrator role.
-  $rid = variable_get('user_admin_role', 0);
-  if ($rid) {
-    $permissions = array();
-    foreach ($modules as $module) {
-      if ($module_permissions = module_invoke($module, 'permission')) {
-        $permissions = array_merge($permissions, array_keys($module_permissions));
-      }
-    }
-    if (!empty($permissions)) {
-      user_role_grant_permissions($rid, $permissions);
-    }
-  }
+  user_administrator_grant_permissions($modules);
 }
 
 /**
@@ -3664,3 +3653,31 @@ function user_rdf_mapping() {
     ),
   );
 }
+
+/**
+ * Grants permissions for the administrator role.
+ *
+ * This function needs to be called any time the list of permissions is
+ * updated, such as when a module is enabled or when a node type is created.
+ *
+ * @param $modules
+ *   Optionally, a list of modules for which to grant permission for the
+ *   administrator role.
+ */
+function user_administrator_grant_permissions($modules = NULL) {
+  $rid = variable_get('user_admin_role', 0);
+  if ($rid) {
+    if (!$modules) {
+      $modules = module_list();
+    }
+    $permissions = array();
+    foreach ($modules as $module) {
+      if ($module_permissions = module_invoke($module, 'permission')) {
+        $permissions = array_merge($permissions, array_keys($module_permissions));
+      }
+    }
+    if (!empty($permissions)) {
+      user_role_grant_permissions($rid, $permissions);
+    }
+  }
+}
diff --git modules/user/user.test modules/user/user.test
index 6682152..0485540 100644
--- modules/user/user.test
+++ modules/user/user.test
@@ -997,6 +997,9 @@ class UserPermissionsTestCase extends DrupalWebTestCase {
     $edit['modules[Core][aggregator][enable]'] = TRUE;
     $this->drupalPost('admin/modules', $edit, t('Save configuration'));
     $this->assertTrue(user_access('administer news feeds', $this->admin_user), t('The permission was automatically assigned to the administrator role'));
+
+    $type = $this->drupalCreateContentType();
+    $this->assertTrue(user_access('delete any ' . $type->type . ' content', $this->admin_user), t('The permission was automatically assigned to the administrator role'));
   }
 
   /**
