the problem is the eCart get Contents From Form behavior.
this uses the Any Form Post trigger, so is being triggered when the cart page posts to the checkout page, and again when the eCart checkout button.
on the bindings panel, click the plus button, select Form Data. in the Form Data interface, click the folder icon, and select the cart display page.
next, go to the server behaviors page, and edit the eCart Get Contents from Form behavior. for the trigger, click the lightning bolt, and select the checkout button from the cart display page form.