Hi Robin,
I'm not using S32K1 RTD - I'm configuring the UART directly in the LPUART registers.
To clarify, I was trying clear the OSR and SBR bits first (using LPUART_BAUD_OSR_MASK and LPUART_BAUD_SBR_MASK), then set the required bits (using LPUART_BAUD_OSR(x) and LPUART_BAUD_SBR(x)) to get the baud rate that I need. The key is that if you clear all of the OSR bits, it will result in an oversampling ratio of 16, which is the same as the default with the lower 4 bits set. The reference manual says this, but doesn't appear to fully explain what happens when you clear the OSR bits.

What I didn't understand was that if you clear all of the OSR bits, the hardware doesn't just interpret that as using an oversample ratio of 16, but instead it literally forces the 4 lower bits back to 1, back to the default setting. So you can't use the typical pattern of masking and clearing those bits first, then setting the bits you need. Instead you have to set the BAUD register all it once with the values that you need in all of the bit groups.
So by changing this:
IP_LPUART0->BAUD &= ~( LPUART_BAUD_OSR_MASK );
IP_LPUART0->BAUD |= ( LPUART_BAUD_OSR(10u) );
...
To this:
IP_LPUART0->BAUD = ( LPUART_BAUD_OSR(10u) | ... );
It looks like it is now working as expected.
Thanks again for your help.
Regards,
Trevor