Thanks as always, Quinn. I figured out after much experimentation that the problem isn't Obj-C. I was able to change my code to work correctly ... by switching from a nib-based UI to a storyboard-based one, of all things. No idea why this makes a difference, but:
the storyboard-based UI uses an NSViewController instead of an NSWindowController, and
the WKWebView is now instantiated as the storyboard loads, not during the -applicationDidFinishLaunching: method as before.
Less usefully, I also ported my initial Obj-C test code to Swift and it failed the same way.
I filed two Radars, errr, "Feedback Reports", FB10015555 and FB10015541, each of which has a sample project attached. One of them demonstrates the delegate not being called, the other demonstrates a crash(!) if I use KVO to observe the webview's "title" property.