diff -r adadaccc1bb5 lib/sqlalchemy/orm/instrumentation.py
--- a/lib/sqlalchemy/orm/instrumentation.py	Fri Oct 28 17:46:28 2011 -0400
+++ b/lib/sqlalchemy/orm/instrumentation.py	Sat Oct 29 11:54:40 2011 -0400
@@ -303,12 +303,15 @@
             # user error situation but allow the object
             # to be constructed, so that it is usable
             # in a non-ORM context at least.
-            return self._subclass_manager(instance.__class__).\
-                        _new_state_if_none(instance)
-        else:
-            state = self._state_constructor(instance, self)
-            setattr(instance, self.STATE_ATTR, state)
-            return state
+            subclass_manager = self._subclass_manager(instance.__class__)
+            if subclass_manager is not self:
+                return subclass_manager._new_state_if_none(instance)
+            # here, we're working around some third party
+            # class instrumentation systems that make shallow
+            # copies of classes.
+        state = self._state_constructor(instance, self)
+        setattr(instance, self.STATE_ATTR, state)
+        return state
 
     def state_getter(self):
         """Return a (instance) -> InstanceState callable.
