An alternative is to make a similar implementation as Cash on delivery where AdminOrdersControllerCore is setting $defaults_order_state according to PS_OS_COD_VALIDATION set in ps_configuration table:
$defaults_order_state = array( 'cheque' => (int)Configuration::get('PS_OS_CHEQUE'), 'bankwire' => (int)Configuration::get('PS_OS_BANKWIRE'), 'cashondelivery' => Configuration::get('PS_OS_COD_VALIDATION') ? (int)Configuration::get('PS_OS_COD_VALIDATION') : (int)Configuration::get('PS_OS_PREPARATION'), 'other' => (int)Configuration::get('PS_OS_PAYMENT') );
This is the way it is implemented in PS1.6.1.17.
In my case i updated PS_OS_COD_VALIDATION from 14 (pending payment at delivery) to 3 (preparing order) directly in the database.