I see this topic has being going a while and had lots of input - thought I'd chip in - don't know if these are best practices, but this is what I've done.
I have a similar system, oil fired boiler heating a hot water tank - house is old and has had coal/coke fire, and later tank gas, and is now oil.
My system had a timer for heating on/off and hot water on/off. The heating on/off went to a programmable thermostat that allowed timed heating (if the first unit was set to permanently on).
These programmers turn on motorised valves, one for hot water, one for the central heating.
If the motors open the valves, they press a microswitch that turns the boiler on, and starts the central heating pump. So I can centrally heat the house, and or heat the water.
My radiators are fitted with manual TRVs.
The main heating on/off timer began to fail and I replaced the heating and hot water programmers with sonoff TH16s, flashed with Tasmota - approx 4 or 5 years ago.
I have cut a hole in the insulation of my hot water tank, and embedded a battery powered temp and humidity sensor that transmits at 433MHz - I have a RPi with SDR dongle running rtl_433 that reads the hot water tank temperature (it monitors the battery too and warns me if they need changing), and use node-red and BigTimer to run a schedule. I also use the SDR dongle to read lots of other sensors, eg oil tank level via oil watchman.
I have home made touch screen units that can turn the heating/hot water on/off on demand, or prevent hot water today, if not needed. These units also send room temp back to node red to allow it to determine whether heating is needed - these are averaged to avoid the chance of bad readings (I had these in the past using dht22 sensors, but now use BME280s without any issues).
I have a number of procedures in case of issues.
The boiler will run until the set temp is reached or a maximum boiler time is reached - to prevent indefinite heating in case something goes wrong with the hot water sensor.
I have tasmota on the Central heating and Hot water controllers set so that if they lose wifi or mqtt connections they turn on - in case I'm away in the winter to prevent bursts - the TRVs will then limit the house temperature.
If the heating is on, to prevent the boiler turning on and off too frequently I've set a minimum on/off period (10 or 15 minutes).
In case of a RPi failure (I have a spare hot swap unit and power supply) the timers in sonoffs are set as a fall back timer, though I would have to connect to them and turn those timers on.
If I'm not in the main room I can turn it's TRV down, go into another room and turn the heating on (touch screen in that room) and up it's TRV if required. My touch screens have pir so I could automate it to some extent, but I've not found it necessary as this doesn't happen often, though I have seen eg the Shelly TRVs but for my use case don't need them.
The Sonoffs have a manual on/off switch on them in case of systemic failure (I have spare flashed units just in case too).
I posted my flow in this thread a while back
and a photo of one of my home made controller units
My system evolved over a number of years, and continues to get periodic tweaks, but has run very well, mostly without issue.
HTH