I think we need to isolate which section of code the lock happens in and whether it's repeatable/deterministic across runs. It should be possible to see which sequence of invoke()s causes the lock.
I’ve debugged this same sort of issue before several times. V3 has been running for a couple years no with no occurrence of deadlock, and it is basically the same code. The new work in v4 is incomplete, which includes debugging this deadlock.
Prolly not too much unfortunately. The outstanding work on v4 is not large in amount, but requires a lot of context. It takes me about a week to get my head back into it.