I've been working with C# most of my career, but every so often they add bits to the language which for some reason I've never really got to make use of. And "covariance" is one of those things. But I picked up a beta copy of a great new book recently (Eric Lippert's "Fabulous Adventures in Data Structures and Algorithms" from Manning) and it had a simple but fascinating example of a situation where this can work. It taught me something that maybe you might find interesting too...
I've been looking at some work related to Content Types in Content Hub recently, and while this is a bit like Data Templates in the good old DXP, I had a couple of things I had to spend time researching as part of this work. So maybe if you're looking at using the CMP features, this might help you understand a couple of quirks too...