Not a complete answer but I think these woes are partially caused by running integration tests inside an overarching transaction - this article explains why this is a bad idea. Am going to attempt to rewrite all the data population to be non-transactional and cleared up manually at the end of each test.

Email codedump link for Why is @Transactional(Propagation.NOT_SUPPORTED) not working as expected?