to embed deftypes in the bytecode the compiler emits the value of each field, then emits a call to the deftypes underlying class's constructor.
to get a list of fields the compiler calls .getBasis.
the getBasis fields are the "clojure" level field names of the deftype, which the actual "jvm" level field names have been munged (replacing - with _, etc), so the compiler tries to generate code to set values on non-existent fields
you can work around this by using field names that don't require munging. a solution might be just calling munge in the emission of field sets of ITypes