Po kilku próbach odkryłem, że był to problem z Load Balancerem Azure.
Po 60s bezczynności rozłączy wszystkie oczekujące połączenia TCP.
Po dalszych poszukiwaniach znalazłem ten post FAQ diagnostyki MongoDB i ustawiłem tcp keepalive na 120s:
sudo sysctl -w net.ipv4.tcp_keepalive_time=<value>
ustawiłem też socketKeepAlive w MongoClient na true:
MongoClientOptions.Builder options = MongoClientOptions.builder();
options.socketKeepAlive(true);
mongoClient = new MongoClient(mongoAddress, options.build());
Po tych naprawach problem wydaje się zniknąć!