I've been fooling around with this more the last few days and have found additional details about the problem, or perhaps, several different problems.
FIrst of all, I'm having issues with the stock Honeywell T6 Zwave thermostat driver. I haven't been able to get it to recognize all three of the available fan modes (on, auto, circulate). That driver only recognizes two fan modes (on, auto).
If I change the controlled thermostat's driver to dizzyd's "Advanced Honeywell T6 Pro Thermostat" then I was able to get all three of my available fan modes recognized. All three modes also showed up in the thermostat controller for that thermostat and on the dashboard for both the thermostat and thermostat controller. But I'm still having problems (read on) and so I am thinking the driver issue may be one of several problems.
Even after successfully getting the controlled thermostat and controller thermostat to recognize all three fan modes (using dizzyd's advanced driver) I continued to have problems when using the thermostat controller to set the fan mode of the controlled thermostat. Changing the thermostat controller fan mode to "on" would successfully change the controlled thermostat's fan mode to "on", but if I selected either "auto" or "circulate" for the controller thermostat, no change would occur in the fan mode of the controlled thermostat.
I wrote a brief rule machine app to capture the string being assigned to the fan state of the controlled thermostat. I found that for changes to "auto" and "circulate" modes, a space was appended to the front of the strings (" auto" and " circulate"). "on" showed up without problem. Also, in another rule machine test, I found that using the thermostat controller fan state as a trigger failed when I used the specific conditions of "auto" and "circulate" as the trigger conditions, but if I used a more general condition of "fan state changed" as the trigger, then a trigger event occurred. So once again this suggests inconsistent string variable assignments for "auto" and "circulate" in the controller thermostat (and perhaps similarly in the controlled thermostat as well).
Lastly, I notice what may be an unrelated problem in dizzyd's driver in my logs. I get an error message "ava.lang.NullPointerException: Cannot invoke method and() on null object on line 602 (method setThermostatFanMode)". j After looking at the code, it looks like a problem with passing an null or invalid argument for changing fan mode for the controlled thermostat. This error fires when I try to directly change the controlled thermostat fan mode from the dashboard. If I change fan mode from the device page, I don't get any such error. So it may be related to string alignment problems in the dashboard code, the thermostat controller code, and/or the controlled thermostat driver.
I was able to write a workaround rule machine app which allows me to at least control the controlled thermostat fan mode from the dashboard's controller thermostat. Maybe a similar approach will work for you as a workaround.