diff --git a/modules/field/modules/list/list.module b/modules/field/modules/list/list.module
index 608679bbb5f958e07dd22f555fdbee2366f06a49..2518ebcfc29c1960a635a732e3c547da16822a6c 100644
--- a/modules/field/modules/list/list.module
+++ b/modules/field/modules/list/list.module
@@ -343,7 +343,7 @@ function list_allowed_values_string($values) {
 function list_field_update_forbid($field, $prior_field, $has_data) {
   if ($field['module'] == 'list' && $has_data) {
     // Forbid any update that removes allowed values with actual data.
-    $lost_keys = array_diff(array_keys($field['settings']['allowed_values']), array_keys($prior_field['settings']['allowed_values']));
+    $lost_keys = array_diff(array_keys($prior_field['settings']['allowed_values']), array_keys($field['settings']['allowed_values']));
     if (_list_values_in_use($field, $lost_keys)) {
       throw new FieldUpdateForbiddenException(t('Cannot update a list field to not include keys with existing data.'));
     }
diff --git a/modules/field/modules/list/tests/list.test b/modules/field/modules/list/tests/list.test
index 941d2b4cb02d8df66bb4e0cc36e4e2ec06f40adc..dec09560f8761eeccc31b5aa646815ebd618ba65 100644
--- a/modules/field/modules/list/tests/list.test
+++ b/modules/field/modules/list/tests/list.test
@@ -55,6 +55,23 @@ class ListFieldTestCase extends FieldTestCase {
     $this->assertTrue(!empty($form[$this->field_name][$langcode][2]), t('Option 2 exists'));
     $this->assertTrue(!empty($form[$this->field_name][$langcode][3]), t('Option 3 exists'));
 
+    // Use one of the values in an actual entity, and check that this value
+    // cannot be removed from the list.
+    $entity = field_test_create_stub_entity();
+    $entity->{$this->field_name}[$langcode][0] = array('value' => 1);
+    field_test_entity_save($entity);
+    $this->field['settings']['allowed_values'] = array(2 => 'Two');
+    try {
+      field_update_field($this->field);
+      $this->fail(t('Cannot update a list field to not include keys with existing data.'));
+    }
+    catch (FieldException $e) {
+      $this->pass(t('Cannot update a list field to not include keys with existing data.'));
+    }
+    // Empty the value, so that we can actually remove the option.
+    $entity->{$this->field_name}[$langcode] = array();
+    field_test_entity_save($entity);
+
     // Removed options do not appear.
     $this->field['settings']['allowed_values'] = array(2 => 'Two');
     field_update_field($this->field);