Thanks, Justas.
I agree with everything you've said. No, we are unfortunately not using the RMS service, I agree that would be optimal, but the owners of the business I am doing this work for won't pay for it.
I had the (pretty obvious in hindsight) idea to SSH into my test bench router and check the configuration (‘uci show network’) before and after making the change via SMS, but before committing the change, and have found the culprit.
The factory default config looks like: network.lan.ipaddr='192.168.1.1’.
After sending and receiving the following, the config looks like: network.lan.ipaddr=''\''192.168.54.1'\''' — broken (this is quote-backslash-quote-quote-value-quote-backslash-quote-quote-quote).

I then had the idea to resend the command without the quotes. After sending and receiving the following, the config looks like: network.lan.ipaddr='192.168.54.1’ — success!

I then sent a commit via SMS, restarted the router via SMS, and all is fine with the new IP and subnet.
Looking at the router, I can see that the value is always enclosed in single quotes when viewed using ‘uci show’ or from the config file:
Snip from SSH:

Snip from the config file:

Looking looking at Teltonika’s UCI command reference here https://wiki.teltonika-networks.com/view/UCI_command_usage, I see that values are never enclosed in single quotes in the examples:

Reading the UCI syntax here https://openwrt.org/docs/guide-user/base-system/uci, I can see that the value should always be enclosed in quotes (single or double):

Have I misunderstood the syntax? Perhaps there is an issue with the value being enclosed in quotes because of SMS providers here in Australia (I’ve tested this using both Vodafone AU and Telstra sim’s with the same result, but I can’t see the messages in ‘read messages’), or there is an issue with the Teltonika SMS API including escape characters when processing SMS’s?
Cheers,
Tony