So after this success I switched the battery and I observed that the nipples were frozen. This is fine, since we are home to switch the water for the chickens, and I have some time to experiment.
When I opened the box with the temperature controller to see what it was doing, it was reporting something between 2 and 3 degrees C (I didn't write it down) and that it was on. The battery was not drained enough for the time that the heater would have been on if it had been operating continuously. Upon investigating, the controller had reset itself to 3C with 2C hysteresis--Which means it would be dropping too low. Though, at 2C I would have expected (I thought) for it to be liquid, which it was not. My belief is that the sensor was too close to the heating element.
To fix this issue / improve performance:
(1) Figured out how to set the controller to the proper temperature and have that retained across power outages
(2) Make the temperature sensor floating, so it always measures the top (lowest) temperature in the water (done with a bit of bubble wrap taped to the sensor)
(3) Insulate the bucket with reflective bubble wrap
I did these three things, and set the sensor to try for 40C (about 20C above room temperature [I use F normally but the controller only has C]). Observation indicates that when full it gets up to 31.5C, when half full maybe 33.5C, so approx. 13C above ambient temperature when half full. That means that when it is half full it should function down to about 15 F or a bit lower if I put it outside; we don't _usually_ have temperatures less than that, but this past week has been brutal.
Short-term, I think this is good enough to put back outside partially filled (it may work better than expected if the coop is warmer than outside; haven't been measuring). Long-term, I think I'll add another layer of wire to the tray, and experiment with a smaller two gallon bucket.