That means that the issue is probably a failure on the insert into the database preventing the order from going through fully. My fix probably won't help then. I'll bet they are getting an error associated with the database insert and then trying again, but since the database insert happens after the payment, it causes multiple payments to be processed.
This probably happens because of invalid data in one of the fields. So the next thing to consider is what changes in Canada vs US checkout... Maybe they are leaving the "State" field blank since that changes for canadian users.... maybe they are entering too long of a state and your database entry length doesn't allow enough characters... US customers choose the state from a list, so it will never be blank and never be more than 2 characters in length.
The first step in fixing any problem is reproducing it. Try checking out with a canada address leaving the state field blank. Try entering a long state name like "British Columbia". See if you can reproduce the problem.
Once you can reproduce the issue, go into the orders table in your database and update the OrderState and OrderShippingState columns... make sure they both have "Allow Null" selected and make sure their entry length is set to 100 so you would have plenty of space. Then try to reproduce the problem again. If you can reproduce it initially and then can't reproduce it later, that means you fixed it. Reproducing the issue first is key because it is the only way to verify you have fixed it after.