I am going to correct you here, as you have the layers mixed up.
KWP2000 is the service layer. It can run over any transport protocol. For example ISO-TP, TP1.6, TP2.0 or K-Line.
What you mean here not KWP2000 over CAN, you probably mean K-Line over CAN
As KWP2000 over ISO-TP or TP1.6/TP2.0 is a completely normal thing.
You're always keeping me honest! In this case though, I think there's a case to be made either way and this is pointless bickering... so, perfect for this forum
ISO 14230-1:1999 Road vehicles — Diagnostic systems — Keyword Protocol 2000 actually encompasses every layer, including Layer 1 (Physical), which is really just ISO 9141 rehashed anyway.
Anyway I think I'd be considered "wrong" anyway here since there are 2-byte length headers, rather than the KWP2000 Layer 2 3-byte ones anyway, although there is still an Add8/sum-byte checksum. And the baud rate negotiation isn't really the same.
Regardless, the point I was making was that on a "native" CAN ECU you need hardware that can route a UART over a CAN transceiver for Bosch Service Mode - which in addition to the two frequencies / square waves, is what keeps something like an OpenPort alone from being useful here.