Tailscale on MacOS Often Uses Relay Until App Restart

This is an issue I have been noticing for many months now. I can usually reproduce it as follows:

  1. Startup Tailscale when on my home WiFi.
  2. Go to work. Tailscale is still active when I connect to my work WiFi.
  3. Access a Tailscale device at home. The Tailscale status shows its using a Relay. It stays like this even if leave the connection active for hours.
  4. If I restart Tailscale, and then access the Tailscale home device again, Status immediately shows a direct connection.

One other observation is that even though in point 3 a relay is being used (and I can confirm this by doing a normal system ping - the latency proves it is going through a relay), if I use the Tailscale ping command, it shows a direct ping with a very low latency.

ping uartpi
PING uartpi.ankgt11.gmail.com.beta.tailscale.net ( 56 data bytes
64 bytes from icmp_seq=0 ttl=64 time=60.269 ms
64 bytes from icmp_seq=1 ttl=64 time=34.191 ms
64 bytes from icmp_seq=2 ttl=64 time=33.934 ms
64 bytes from icmp_seq=3 ttl=64 time=34.311 ms
/Applications/Tailscale.app/Contents/MacOS/Tailscale status  uartpi               xxxxxx@     linux   active; offers exit node; relay "blr", tx 120627860 rx 10766092
/Applications/Tailscale.app/Contents/MacOS/Tailscale ping uartpi
pong from uartpi ( via in 12ms

Is there anything I can do here to prevent having to restart Tailscale everytime the network changes?

I am currently on version 1.28.0, but have observed this ever since 1.14 when I started using Tailscale.