It doesn’t check preimage. Just make sure rhe 9735 pubkey matches the nostrPubkey on the lnurl endpoint. It also checks description hash
Discussion
The public key definitely matches.
I expect it’s to do with the description hash then, as I’m probably not serialising the event properly.
Thanks! 🤙🏻
That was totally it, it’s working now! 
Thanks for the reference implementation (cln-nostr-zapper) and the detailed NIP, it made it reasonably straightforward to implement 🙇