Personally I don't think the Master should just bring it into operational state. There must be something wrong with the slave when it suddenly goes into pre-operational state without reason. Normally this never happens. If it is caused by a reset (or something similar) it should stop sending heartbeats for some time for the Master to detect this. This is the normal error handling mechanism which the master can handle.
In you case I think the work-around is the only solution.
Below you can find some code which you could use as example. I just created it based on experience, but didn't test it, which means there could be some errors in the code, but I hope it helps.
ENABLE:= NOT(getStateNode1.CONFIRM) AND (getSTateNode1.ERROR = CIA405.CANOPEN_KERNEL_ERROR.CANOPEN_KERNEL_NO_ERROR),
tonNotOpNode1(IN:= getStateNode1.STATE <> CIA405.DEVICE_STATE.OPERATIONAL, PT:= T#30S, Q=> , ET=> );