Thanks but too much code in the project to post!
Fixed the problem. It seemed that a NavigationLink inside a NavigationView works on the iOS 17 simulator and worked on iPad running iOS 17, but not on a real device.
Fixed it by adding an if #available iOS conditional, then used a NavigationStack instead of NavigationView - bit messy but all good.
When I buy the offspring a new iPhone then I can drop the iOS 15 requirement.