I like your PLL approach, because it doesn't try to "recover the original signal from noise", but actually goes ahead and detects what you're actually interested in, the presence of a specific frequency, and uses that to generate a "perfect" tone. Much cleverer than spending hundreds on the best thinkable crystal filter on the market! (I'm always baffled when I go to ham trade shows and people boast how much they spent on the filters for their analog receivers. Congratulations, these people have found an expensive way to do something that is not what they want.)
When we say "filter", we usually mean the linear time-invariant system that convolves the filter impulse response with the signal (either in analog or digital). And for these, the math is non-negotiable: A narrow bandwidth (for a low-pass filter) literally means "nothing can change fast". A "end of CW pulse" is a fast change, end hence gets dragged into length. (We can do the same math for a band-pass filter, it doesn't change). That's the Fourier transform for you: can't be sharply defined in both domains, time and frequency (just as you can't know the position in impulse space and location exactly; Heisenberg says hello and wants his math back).
If convolution is a new term for you, look it up, there's a lot of nice animations out there; it's very intuitive. You're a theoretical physicist, so I assume you'll understand when I say that convolution is just the inner product of an $\mathcal L^2$ space of functions. For linear, time-invariant systems like classical filters, you get a very nice set of eigenfunctions: $\left\{e^{i\omega t}\right\},\,\omega\in\mathbb R$, and that tells you how it is that we can select frequencies with a filter: for any given LTI system, the response of the system to a given $\omega$ is just the eigenvalue.
So, with linear filters, ringing and narrow bandwidth are one and the same phenomenon.
Now, nothing says that a filter that we optimize for a narrow bandwidth is the best solution here - on the contrary: although it's called "CW", it's not a continuous wave at all (such a bad usage of words!): it's a sequence of modulated pulses.
If you know the length of the potential pulses, you could build a filter that is matched to the transmitted pulse shape. Again, pulling the theoretical physicist card on you: that's the filter that maximizes the convolution; i.e. the one that maxes the inner product. And if Cauchy-Schwarz inequality has told us anything, than that for complex-valued functions, that means that your receive filter needs to have an impulse response that is the conjugate time-inverse of the transmit signal's pulse shape.
That would essentially mean that the filter impulse response that the receiver convolves the received signal with a mirror of the expected transmit signal for a "dit" (or a "dah", when you think of that as a different pulse shape).
That's rather trivial to do if your signal is already digital – i.e. instead of continuous complex functions over $\mathbb R$, you only consider a sequence of complex values in a computer. Then, the convolution integral collapses to a sum, and with the length of these pulses, it's even a finite sum.
Implementing it like that means that you get a system where you get a clear peak at the output when there's a "dit" on the air. It's not as long as a "dit" anymore, mind you, just a high value when there's a "dit". Well, seeing that high value, you could of course then synthesize a "dit". Same for "dah".
Now, small problem here: there's humans shaping the pulse, and that's a terrible idea (for many reasons, but let's stay focused on this one): that makes the shape of the "dit" and the "dah" not exactly known.
You could solve that by giving your "dit" (and "dah") detectors more "leeway" to signal detection of a pulse even when the peak isn't that clear, or you could have a full bank of filters for different pulse shapes, and see which ones trigger. All these things are done in practice.
I'm not quite sure, though, how to answer the question of
What's state of the art in CW filters
because state of the art would
- not do CW, that wastes the precious bandwidth-power product that makes your signal differ from measurement noise, and
- when trying to detect CW, one wouldn't do a pure filtering – but, really, use a PLL like you did, to first recover the frequency, and then use something that tries to make sense of the different pulses visible there.
There's a lot of approaches there – from "modern style" machine learning with neural networks to empirical models.