I have the same exact problem - living in Canada, with the same conditions. The reality is that it depends on the client, but here's what I do.
1. RBC has a USD account for $9/month. It's the cheapest in the country. For clients who insist on paying by ACH or cheque, that allows me to take USD inbound and hold them as needed.
2. I use a money changer (persepolis work, as do several on King Street) simply because the DIFFERENCE on the exchange can be as high as 1.5%, which is a little nuts. It's not automated (sadly), but companies like Freedman will pick up cheques from you - if you're not already downtown.
3. BTC + Coinbase. Some people are more than happy enough to pay in BTC. That in turn makes it easy to get other currencies without the pain.
#3 is by far the most cost effective - especially if you deal with the occasional non-US currency, as I do. The reality is that items #1+#2 combined helped me shave hundreds of dollars in exchange fees.