Constant temperature forced, yes. From what you're saying then this behaviour is correct. This is not appropriate behaviour however
Step through the code and calculate what you think the output would be if you had a constant temperature. Think also about what would happen to the 'input' value if there is nothing acting on it - i.e. if it's forced to a constant value, and not being a process engineer I can only explain in terms of what I see. From what I can see there is a benefit to integral control which I'm happy to be constructively challenged.
In the manual refer to this pic -
This model assumes there is no heat loss in the system. In reality there is, and there will always be a slight difference between the input temp and the output temp. This difference will be significant to start with but it will creep slowly until it gets to say 0.1°C. To move this temp from 65.9°C to 66°C it will be necessary to add energy, and with a constant output approaching zero it means mathematically the system will stabilise to below the target temp. My observations without any integral control is that the system won't stabilise on the target temp, it will get close but never get there. I've still got my HERMS with 14.5l of water in it I didn't get a chance to brew with on the weekend so I'll run another temp test tonight.
FYI P = 600, I = 0.1, D = 2 resulted in 0.2°C overshoot but stabilised exactly on 40.0°C after about 10 mins of overshoot. The mash tun lagged by about 2°C when the HExout was within 1°C of target. I'm happy with that. I'll try tonight with no 'I' and report back.
You raise a good point - there is definitely energy leaving the system, but it doesn't make the system self-regulatory, and doesn't result in a steady-state error. The main thing that would make it self-regulatory is a mass flow - going back to the heat balance equations in the Wiki. Considering the energy lost from the mash tun walls, pipe, etc., we're still left with a °C/min steady temperature drop, rather than a °C steady state error in a flowing system. In the Wiki it talks about insulation. Insulation is analagous to energy - it can completely remove that energy loss (W or J/s). If you only use a bit, putting it between your sensing temperature probe and your mash tun will help with getting these temps as close as possible.
Read the very next part in the Wiki past the diagram. Practically speaking, you could very well use a very long integral time (30, 60min) or - considering the arduino is in gain - a very small gain. The reality is that it doesn't correct any steady state error, and only contributes to overshoot. The very small amount that would be appropriate might as well be zero. I have tried to keep things simple, but I can appreciate it's sometimes fun to over-complicate things.
The loss to surroundings is a °C/min, and a proportional output on the element also gives °C/min which can be balanced perfectly. I think the problem you are seeing is either being caused by the Derivative action on the controller - have you actually tried it with P only? - or is the result of flow mixing of this temperature in the mash tun. Your answer depends on where you're measuring with your controller.
Which brings me to my next point... if you control on the coil outlet temperature, there is no reason why you can't get to a setpoint and hold this very well with P or PD. The mash tun will take a while to catch up - likely a very long time with a low flowrate - as it's relying on the mechanism of mixing. To get a good response in your mash tun, you can either use extra temperature or a high flow - so a bit of overshoot in your coil will probably help you if you get it right. If your system has inherent overshoot, why introduce more with I? That's what D is for, or P.
And finally, the response you described (0.2°C overshoot for ~10min, settling down to the SP) can be achieved with PD only - or possibly even P only. If you read through the Wiki you will realise that my overall tone is to keep it simple and you'd be surprised how well P will do. If you have inherent overshoot, D will help out. Adding any sort of I will introduce overshoot, which makes things unncessarily complex. Your system sounds like it has some inherent overshoot (caused by lag) so I would have suggested you're on the right track with the system you have trying for a P of 500/600 and a D around 1... but you're ultimately welcome to try whatever you wish.