It might be useful here to review the process of detachCopy.
First, the instances in the parameter list are made persistent as if makePersistent had been called. This will recursively make detached and transient instances persistent (detached instances are replaced in this process by corresponding persistent instances).
Second, the FetchPlan is used to instantiate the object graph.
Third, the detached instance graph is created from the persistent object graph, using the FetchPlan to determine which fields are to be marked as loaded in the detached instance graph.
The detached instances corresponding to persistent instances by position in the original parameter list are returned to the user.
So the test case that calls detachCopy on a detached instance expects that the instance returned is a newly created detached instance with the same object id as the persistent instance in the cache and the parameter instance.