Root cause is in clojure.contrib.core/defnilsafe, so similar functions like .?. will have the same problem. I futzed around for a while to try and figure it out, but defnilsafe is a little too meta for me. The problem is, predictably enough once you've glanced at the code, with ~'~nil-safe-name.
The general solution ought to look like
(let [qname (symbol (name (ns-name *ns*)) (str nil-safe-name))]
(more stuff using ~qname instead of ~'~nil-safe-name...)))
But I couldn't make it quite work.