Makes most sense to exchange your US dollars for Canadian dollars at the banks. You'll get the best exchange rate.
A retailer can choose whatever exchange rate it wishes to use. Some choose $1 equals $1. Sometimes they'll not give a better rate because taking in US dollars increases their overhead costs ... they have to go to the bank to exchange those US dollars unless they have a US dollar bank account. Unless a retailer has a US dollar bank account, they pay a built-in fee to "sell" your US dollars to the bank for Canadian dollars.
Keep it simple ... you go to the bank and buy Canadian dollars with your US dollars. You still gain. Then you're assured you'll have the correct currency in your wallet.
There was a period where banks in B.C. weren't taking US coins. It cost too much to ship the coins back to the US and it was a money-losing scheme for the banks. So some retailers paid close attention to the coin currency.