Based on dsparks work I was able to get this working in 4.1.9 in the fast lane checkout.
Around line 85 in modules/Fast_Lane_Checkout/checkoutmethod2.tpl find
Code:
<td valign="top" width="70%" style="padding: 0 5px;">
{include file="customer/main/subheader.tpl" title=$lng.lbl_payment_method}
<table cellspacing="0" cellpadding="2" width="100%">
{foreach from=$payment_methods item=payment}
and change it to:
Code:
<td valign="top" width="70%" style="padding: 0 5px;">
{include file="customer/main/subheader.tpl" title=$lng.lbl_payment_method}
<table cellspacing="0" cellpadding="2" width="100%">
{if $userinfo ne "" and ($userinfo.b_countryname eq "Canada")}
{assign var="destination" value="L"}
{else}
{assign var="destination" value="I"}
{/if}
{foreach from=$payment_methods item=payment}
Then around line 95, you'll find:
Code:
<tr class="TableSubHead"{*cycle values=' class="TableSubHead", '*}{if $payment.is_cod eq "Y"} id="cod_tr{$payment.paymentid}"{/if}>
And change it to:
Code:
<tr class="TableSubHead"{*cycle values=' class="TableSubHead", '*}{if $payment.is_cod eq "Y"} id="cod_tr{$payment.paymentid}"{/if}{if $destination eq "L" and $payment.payment_method eq "Money Order"} style='display: none;'{/if}>
In this case, if the user is Canadian and the payment method is money order, then we don't display the table row.