If I wasn't so lazy, I'd try analyze the time-of-propagation for the transactions and see if it matches my hunch.
Well, maybe it's not laziness, One must have priorities, I've posted this just in case somebody find it useful/interesting.
With bustabit, I spent a few months and wrote my own purpose-built coinselection system to avoid these problems, but for most people that's a lot too much work and it's easier to just do a hack like make transactions occasionally include multiple-change outputs. That would likely explain some of the of the DAG like graphs you see?
I think something like this is the most plausible answer, nevertheless I felt the urge to share it with the community.
Edit: Looks like your website is one of the few that actually calculate cpfp fee rate correctly

I'm curious if you have the code you use for that calculation available? I (personally) really struggled with this calculation, and the solution I have feels like it's 10x as complicated as what someone smarter than me would come up with.
Yes, I made a special effort in having a mining queue which place CPFP Transactions in it's correct place, if that weren't the case, the mining queue wouldn't be accurate. Glad to see somebody has noticed it.
I'm proud of the hierarchical visual representation in
https://mempoolexplorer.com/mempool and in the graphical representation of dependencies between transactions, but the algorithm I've used it's the same as in bitcoind getBlockTemplate but generalized for the entire mempool, not only the first block. You can check it at
https://github.com/mempoolexplorer/txMemPool/blob/master/src/main/java/com/mempoolexplorer/txmempool/entites/miningqueue/MiningQueue.javaAs I've stated in
https://mempoolexplorer.com/faq#aims this begun as a side project to learn microservices in java using spring, be aware of the amount of services needed to make it work (i.e. administration server, configuration server, gateway service... etc). I think you can ignore all that paraphernalia and focus on the code I've pointed you to. I'm planning to remove the microservices architecture sooner than later anyway...