diff -u b/includes/commerce.controller.inc b/includes/commerce.controller.inc
--- b/includes/commerce.controller.inc
+++ b/includes/commerce.controller.inc
@@ -24,6 +24,17 @@
   public function isLocked($entity);
 
   /**
+   * Determines whether the provided entity is read-only.
+   *
+   * @param object $entity
+   *   The entity to check.
+   *
+   * @return bool
+   *   True if the entity is read only, false otherwise.
+   */
+  public function isReadOnly($entity);
+
+  /**
    * Determines whether the provided entity is cached.
    *
    * @param object $entity
@@ -79,6 +90,13 @@
   protected $lockedEntities = array();
 
   /**
+   * Stores the ids of read-only entities.
+   *
+   * Track which entities where meant to be loaded read-only.
+   */
+  protected $readOnlyEntities = array();
+
+  /**
    * Stores the flag for if a condition has been passed for requesting locking.
    *
    * By default, locking is always requested unless specifically set to false.
@@ -101,6 +119,13 @@
   }
 
   /**
+   * Implements DrupalCommerceEntityControllerInterface::isReadOnly().
+   */
+  public function isReadOnly($entity) {
+    return isset($this->readOnlyEntities[$entity->{$this->idKey}]);
+  }
+
+  /**
    * Implements DrupalCommerceEntityControllerInterface::isCached().
    */
   public function isCached($entity) {
@@ -181,6 +206,13 @@
         unset($this->entityCache[$id]);
       }
     }
+    else {
+      // Store the ids of the entities in the readOnlyEntities array for later
+      // tracking, flipped for easier management.
+      if (!$this->requestLocking && $ids) {
+        $this->readOnlyEntities += array_flip($ids);
+      }
+    }
 
     return parent::load($ids, $conditions);
   }
diff -u b/modules/order/commerce_order.module b/modules/order/commerce_order.module
--- b/modules/order/commerce_order.module
+++ b/modules/order/commerce_order.module
@@ -830,4 +830,17 @@
 
 /**
+ * Determines whether or not the given order object is read-only.
+ *
+ * @param $order
+ *   A fully loaded order object.
+ *
+ * @return
+ *   Boolean indicating whether or not the order object is read-only.
+ */
+function commerce_order_is_readonly($order) {
+  return entity_get_controller('commerce_order')->isReadOnly($order);
+}
+
+/**
  * Determines whether or not the given order object represents the latest
  * revision of the order.
