Transactional Replication hangs when huge transactions flow
I've experienced a similar problem. It turned out to be an issue with when the "Agent history clean up: distribution" job kicks-off on the distributor. This job would hang for a long time and bring replication to a stand-still when there were a lot of transactions in the queue. Check the History for the Job to see if it's stalling at the same time you have your problems.

The solution we implemented was to push through transactions in Batches with a WAIT between batches. we had to experiment with the batch size and Wait time to get the sweet-spot that didn't cripple the distributor.