I agree, that looks strange.
Idea 0: Each time you tested this, did you remove the previous package before loading the new one? No card can contain the same package (AID) twice. This is obvious, but still worth mentionning.
Idea 1: Try to call register() in the install() method, after returning from the constructor. No, that's not the same. install is a class method, while the constructor is an instance method.
CAP files are zip/jar files.
Each one will contain a manifest, and a set of ".cap" files (header.cap, directory.cap) in a subdirectory.
Can you list the cap components in each case? and what about the manifest?