unable to create new draft programatically for published node
I've not tested or checked against the source code but I think you should try to node_load after node_save and before workbench_moderation_moderate.

node_save($node);
$saved_node = node_load($node-&gt;nid);
workbench_moderation_moderate($saved_node, 'published');