Coinbase reported this issue to me many months ago, I forgot to open an issue:
If a node receives a transaction but does not know about one of it's parents, it is added to mapOrphans (and is not relayed).
If the parent shows up later, it is moved from mapOrphans into the memory pool. It should be relayed at that point, but is not.
This can result in a whole chain of transactions getting stuck.