It seems that this issue is more related to statuses rather than payments.
I have observed that for COD the order gets status 'Preparation in progress' and upon order confirmation by customer the payment is automatically assigned to order, after you will update the status of the order, for example to Shipped/Delivered the same payment is assigned once more and doubles the payment.
In my case I have modified modules/cashondelivery/controllers/front/validation.php and commented line 59:
/* $this->module->validateOrder((int)$this->context->cart->id, Configuration::get('PS_OS_PREPARATION'), $total, $this->module->displayName, null, array(), null, false, $customer->secure_key);*/
and replaced it with:
$this->module->validateOrder((int)$this->context->cart->id, Configuration::get('PS_OS_COD_VALIDATION'), $total, $this->module->displayName, null, array(), null, false, $customer->secure_key);
PS_OS_COD_VALIDATION is the status for 'Waiting COD Validation' from config/config.inc.php file
After testing the above mentioned modification the payment is not assigned after order confirmation by customer and once you will update the status of your order to Shipped/Delivered you will see only one payment.
In case you do not want to perform manual modification, another solution might be to untick 'Consider the associated order as validated.' and 'Set the order as paid.' checkboxes from Backoffice > Orders > Statuses > Preparation in progress (In this way the order is not marked as paid after confirmation).
Hope this helps
By the way, I am using PS 1.6.1.4
Cheers!
Marius