1. Hibernate objects that are lazily initialized are managed by javaassist (or cglib for older versions) proxy objects. Basically what happens is the proxy is generated by sub-classing your object. When a lazy initialized object becomes initialized the handler.target updates to reflect the initialized properties.
2. The reason you are having problems is because instance of does not work on the proxy object. This is a problem you will have with lazy loaded objects that are part of a type hierarchy. You have a couple options:
2a. Eagerly fetch the object
2b. Try de-proxying the object