Thanks for the follow-up!
Destructuring has to happen immediately because accessing the value to be destructured "later on" may violate thread safety invariants of the program (e.g. if a derived logger is passed to another thread, or if the object is only available under a lock that is held at the call to ForContext() but has been released by the time Write() is called).
I'd guess this can be designed around with a different API, but the payoff's probably not enough to warrant the effort vs. the explicit level check in the workaround.
Cheers,
Nick