After posting this I tried one more thing, and it seems to be working!
I tried the various location manager "activityType" values, and while most of them allow the location to sleep, it seems like "airborne" requests high priority location data, even for low-speed things like runway taxiing.
With that activityType set, I'm now getting consistent location updates, even with subtle boat movements.
Topic:
App & System Services
SubTopic:
Hardware
Tags: