Wyatt, the customer does not seem to have any network blocking/interception issues, because after the frozen program is restarted, ActivateEx() keeps reporting failure properly, without further freezing.
So the issue happens exactly on the first time when a client exceeds their amount of available activations (say, 2 of 2 available activations had been done already, and now client tries to activate the third one).On the first time, the ActivateEx() function freezes.On the second and subsequent tries (after the whole host process is killed and restarted), we receive a proper error from ActivateEx().
Moreover, previous attempts of ActivateEx() were successful on the same server, so network had been working fine (for some reason, the library thinks that server becomes a new machine and requests a separate activation slot which is a nuisance, but manageable one as long as the whole platform does not get frozen upon depletion of free slots. I even think that this "drifting" of unique machine ID might be linked to reasons why the freeze occurs).
Nothing changes in networking environment between the first and the second try, so I suspect the issue has nothing to do with wrong connections or blocked ports.