I do not see any obvious issue in your code structure.
* Can you swap the lines disconnecting {inter|intra}Comm in both sides? Does that make any difference?
* Does using comm.Free() on both sides make any difference?
One thing this could be happening is because your code does not complete all communication calls, as Disconnect() blocks until all ongoing communication completes. Using comm.Free() is a way to figure out if that may be the case.
Any chance you could test this on Linux or macOS? Or maybe with Intel MPI on Windows? This way you could confirm whether the problem is related to MSMPI or not, then I would suggest contacting the MSMPI dev team, they have been quite responsive to my queries and bug reports in the past. Of course, much better if you can set up a short, self-container reproducer. Also probably better if you can reproduce the issue with non-Fortran code, let say pure C, or maybe even pure Python using mpi4py on both sides.