Rates of exchange are a funny thing.
In Border towns, the banks generally just add or subtract a couple % of the current rate to give them a bit of a profit for exchanging dollars. Plus, those border towns generally carry a lot of currency from both sides of the border for convenience. (For the sake of Arguement, most of Canada follows the border-town theory as does the Northern half of the states that bump up to Canada)
Now... let's look at someone travelling from deeper south. I had a visitor come up from a southern state that does not see very much Canadian traffic. For them to exchange currency in their home state to Canadian dollars, it's absolutely insane. There's a steep % that is applied to the money, plus an Exchanging FEE, plus another FEE to actually get the money shipped into their bank for you, you'll also be waiting 7-10 days for the money to arrive.
I told them this was crazy, just come up here and slip your ATM card in a Machine and you'll get a way better rate of exchange on our end.
Moral of the story - Some people (read: Americans) may not be aware that it's actually EASY to get ahold of Canadian Dollars at a decent rate.
But this doesn't mean you should accomodate them at an inconvenience.
Your profession is all about convenience, you're providing a very convenient service at a reasonable cost. The suggestion that you assess a small "handling fee" for having to do the leg-work of exchanging it yourself is not unreasonable. Also, the exchange rate is so low right now, you're not dinging them too badly if you just take American currency at Par.
Odds are an American visiting you is on some sort of trip or Vacation, and lord knows things always cost more when you travel.