Within a crate, changes to the body of an impl item (with def-id X) are not considered to affect AssociatedItem(X) (because computing AssociatedItem(X) only reads from the impl). However, across crates, the data is stored with the item X along with things that are dependent on the body, and hence the results get entangled.
At least I think this is the cause. =)