Ok So after much packet sniffing, trial and error and shear dumb luck I've solved my own problem ...
I fixed the problem by setting up my Freephoneline account as a "voip.ms" account in the basic device configuration (instead of a "Generic Service Provider") and then overrode the ITSP Profile > ProxyServer to be "voip.freephoneline.ca"
Here are the details ...
So as I noted in my first post I realized that my voip.ms account was correctly passing the Caller ID Name and my freephoneline account was not. So I pulled out my old windows laptop I had laying around and plugged in my Obi into the ethernet port and then set up internet connection sharing on the wifi connection. I then fired up wireshark on the laptop and began sniffing traffic as I made calls on both accounts. Here are the INVITE request headers for the 2 accountsFreephoneline
INVITE sip:firstname.lastname@example.org:5060 SIP/2.0
CSeq: 8001 INVITE
From: "PHONE 2
Via: SIP/2.0/UDP 192.168.137.14:5061;branch=z9hG4bK-fffd714;rport
Contact: "My Name" <sip:email@example.com:61348>
Remote-Party-ID: "PHONE 2" <sip:firstname.lastname@example.org>;party=calling;privacy=off
INVITE sip:email@example.com:5060 SIP/2.0
CSeq: 8001 INVITE
From: "My Name
Via: SIP/2.0/UDP 192.168.137.14:5062;branch=z9hG4bK-2db6787e;rport
Contact: "My Name" <sip:firstname.lastname@example.org:61347>
Remote-Party-ID: "My Name" <sip:email@example.com>;party=calling;privacy=off
So I quickly realized that the From header contained the caller ID name that was passed to my Canadian home phone. I started researching the SIP protocol and determined that in Canada our phone system does not use a CNAM lookup to find the caller ID name in a 3rd party database. Instead the name that is passed in the SIP Invite message is used, which actually makes more sense but anyways ...
Details here http://wiki.voip.ms/article/Caller_ID
I started playing with a bunch of values on my Freephoneline ITSP profile and Voice Service settings to no avail. I compared them with my voip.ms settings and found they were identical! In a blind fit or rage I figured I must have missed something, so I setup my sp4 account (which was previously unused) as another Freephoneline account, but by random dumb luck I decided to choose the account type as "voip.ms" because I knew that I could change the ProxyServer address after the initial setup of the account. So after the initial setup I changed the ProxyServer to voip.freephoneline.ca and voila it worked! I don't know exactly why it worked, but I suspect that there is an undocumented inaccessible setting that can only be setup by picking a preconfigured service provider (like voip.ms). I'm guessing that when you select Generic Service Provider most people use this setting with an American voip provider that uses CNAM so this problem doesn't affect them.