The error I'm referring to is here:

There is no "State Counter Timer". The SCT is the State Configurable Timer. The manual describes CTIMERs as "standard counter/timers" - they don't have "state" anywhere in the name.
I was able to get my CTIMER+ADC+DMA setup working over the weekend. Doing it with the MCUX driver is frustrating because of the lack of documentation.
From what I've seen, it looks like some of the functions implement a configuration wrapper ("configure wrap descriptor") and have storage for a descriptor or two, but some of the functions bypass those and allow lower level configuration. There's no explanation about any of that and the examples are inconsistent in their usage.
The example you sent me, and the code I ended up with on Saturday, use DMA_PrepareChannelTransfer(), DMA_SubmitChannelTransfer(), and then DMA_SetupDescriptor(). The channel chain demo uses DMA_SetChannelConfig(), DMA_SetupDescriptor(), and DMA_SubmitChannelTransferParameter(). The interleave transfer demo uses DMA_SetupDescriptor() and DMA_SubmitChannelDescriptor(). None of them provide any explanation of why they use the calls they do. The "Typical use case" section only says to see the demos. The demos provide no useful comments. I'm still not sure why DMA_PrepareChannelTransfer() is needed in my code and why I can't use DMA_SubmitChannelDescriptor() like the interleave demo but I haven't had time to look more closely.
In some cases just blindly copying the demo code might be acceptable, but it's not so useful when you have to build a real-world product and have more than one thing using DMA. You need to know what each function call does and how it relates to the hardware documentation. The only way I can see to do that now is to reverse-engineer the driver code.
Here's what I came up with on Saturday:

To make it a useful ping-pong buffer, the two descriptors point to different adc_rx_buf buffers and they alternate between IntA and IntB so the callback can distinguish which buffer was just filled. This is a useful feature that I don't think the Kinetis eDMA has, but there is zero documentation for the DMA callback in MCUX - you have to look at the source to see what events generate callbacks and how they're passed.
Another place the examples fall short is in the destination address increment setup. The example you provided and the one I referenced before both write to a single destination variable with no increment. The relevant parameter is interchangeably described as "interleave" and "increment", which to me suggest different things - interleaving (as illustrated by the interleaved transfer demo) means skipping ahead so that another transfer can write data into the spaces between. So with an interleave of 0 I would expect a normal increment with no extra spaces, and an interleave of 1 would leave one word of space between each word. The parameter is just an increment, though.
It looks like maybe this wasn't always the case. DMA_PrepareTransfer() sets the source and destination increment based on the type, e.g. kDMA_PeripheralToMemory. Again, nothing is documented.
Scott