It sounds like it could be possibly related to
this issue that I filed at WPILib's C++ Tracker.
Currently, the way the C++ NetworkTables is implemented, anytime you call Put*, it tries to obtain a lock -- which is also the lock that the write thread is holding. The effect is if your robot is blocking when writing to the network (which is likely, particularly if you're writing a lot of keys), then the robot will hang at Put* until the write completes. One way this can manifest itself also is in a complete hang of the robot if a NetworkTables client disconnects from the network, because the write thread blocks (practically) indefinitely.
I've implemented a fix for the performance issue (though it only partially solves the hang issue), and it's available in the
RobotPy fork of WPILib (see
this commit).