Basic notes on PS2/PS3- and my thought process on how I would troubleshoot.
#1 chuff signal and timing is generated or derived from a count of pulses from the tach reader- not a cam switch or magnet. Thus typically it is somewhat random starting position compared to a given wheel position. I'm saying because lets say a traction tire was rubbing a brake shoe in a certain spot of the wheel. That may or may not correspond to the exact timing of the chuff and in fact will sometimes be in sync and out of sync.
#2 Specific to PS3, there is a boiler board that controls the main motor, as well as the lights, the smoke fan motor, and the smoke heater. In addition, this board and processor has 2 serial data lines- transmit and receive. It transmits the chuff signal back to the tender board to trigger the matching chuff sound. It in turn gets its commands for speed, lights, smoke on off from the tender board.
Since it only does it with smoke on- typically, that would eliminate a mechanical bind (example traction tire rubbing a brake shoe, an eccentric crank not clocked properly and jamming the linkage- or some other mechanical periodic friction bind).
Since the smoke heater is more or less constant, this implies the smoke fan motor that pulses and chuffs is somehow drawing excessive current and thus taking some power away from the main motor drive.
So testing:
I would specifically unplug the smoke fan motor, but leave the smoke resistor plugged in (green connector unplugged (typically green and grey wires going to fan motor, red connector plugged in typically purple and brown wires) note both plugs may be white, I'm just referring to some semi standardized colors one might find. Trace where the plug or wire goes to final endpoint in determining what plug is what.
If it's still doing it with the fan completely unplugged- then suspect possible pinched wire in the harness for boiler board to frame ground or other short, or worst case a bad boiler board. Because boards are hard to come by right now from MTH parts, this might be one of those last resort- try reflashing the chain and sound files- with the engine and tender together to ensure the boiler board also gets any associated firmware chain files updated. Again, given the problem, I would do that with the smoke unit (resistor and fan) unplugged just to not potentially cause an issue while programming.