I can confirm exactly 20 min on v14.0.0 as well (waking the Switch from idle each time).
I also monitored the network requests my Switch made, and here are the log files. I have the receipts!
http log: http_timeout_log.txt
dns requests: dns_timeout_log.txt
Here you can see the full 20 minute "session". Every ~1 minute a GET request is made with the user agent "NX NIFM/00".
In between those, every ~3 seconds (!!) a HEAD request is made using the full "Mozilla/5.0 (Nintendo Switch; WifiWebAuthApplet) ..." user agent (that we also see when browing web pages).
These requests are used to determine if the captive portal has been authenticated yet. In a normal flow, as soon as you agree to the terms or log into the hotel wifi, these requests would reply with a special header (X-Organization: Nintendo) which informs the Switch that it's connected to the Internet.
After exactly 20 of the GET requests, and 401 of the HEAD requests, the browser shuts, which is expected just looking at how frequently they occur (401 = (60/3)*20+1). Although it would be interesting if instead of it being a "timeout" if it were more like "try 400 times to connect every 3 seconds, then give up".
Based on this, by counting the number of requests made, it should be possible on our end to tell when the pop up is about to appear. But there still doesn't seem like there's anything that can be done on the networking side of things to interrupt it.
Also interesting is that in the DNS log, a domain name request is only made around every minute. This means in the normal workflow, depending on how the hotspot's captive portal works, it may take up to a minute to be authenticated.