All of the responses I've seen make sense, but none of them quantify the situation very well. I have an inexpensive infrared thermometer, and have used it to benchmark my main engine cooling system. I have a Catalina 28 with a Universal M25XPB engine. The normal engine temperature is 162F. I know that the input to the heat exchanger is about 170F, and there is a 30 degree drop across the heat exchanger when the lake water is about 65F.
A similar process could be used to troubleshoot the heater problem. When the engine has come up to temperture, you could use the thermometer to measure the temperature of the hose going to the heater as it exits the engine, the temperature of the antifreeze input to the heater, and the temperature of the antifreeze output of the heater. You could also measure the temperature of the hot water pressure system as it exits the heater over time by running the tap for 5 seconds, measuring the temperature at the exit of the heater, and repeating the measurements every 5 minutes or so.
If the input temperature to the heater is substantially lower than the exit from the engine, you probably have low water flow in the antifreeze, and the engine heat isn't getting to the heater.
There should be a significant difference between the antifreeze input and output when the hot water tank is cold (heat should be transferring to the tank). If there is little difference, either the antifreeze isn't flowing (see above), or something is preventing heat transfer in the tank (low tank level, plugged tubes, or if you have a winter bypass switch it may not be working right).
Good luck.