Not sure if it's the same problem, but it sounds similar to the issues we had a couple years ago getting FreeSwitch to work with Whistlephone.  Whistlephone also used multiple servers for load balancing, and while outgoing calls worked fine, incoming calls were unreliable.

For more technical details, you can search this mailing list for Whistlephone, about a year and a half ago.

The solution was to add a separate gateway for each proxy server.

So, in conf/sip_profiles/external, I added whistlephone.xml, with the stuff below.  Pay attention to proxy vs proxy1 in the server names, and the added "from-domain" in the secondary gateways.  Using the "realm" parameter seemed to help me, but it took experimentation to find what worked.

--------------------------------------------------------------------
<code>

<include>
<gateway name="WhistlePhone">
   <param name="username" value="xxxxxxxxxxx"/>
   <param name="from-user" value="xxxxxxxxxx"/>
   <param name="proxy" value="proxy.WhistlePhone.com"/>
   <param name="realm" value="WhistlePhone"/>
   <param name="password" value="xxxx"/>
   <param name="expire-seconds" value="600"/>
   <param name="register" value="true"/>
   <param name="retry-seconds" value="30"/>
</gateway>

<gateway name="WhistlePhoneProxy1">
   <param name="username" value="xxxxxxxxxxx"/>
   <param name="from-user" value="xxxxxxxxxx"/>
   <param name="proxy" value="proxy1.WhistlePhone.com"/>
   <param name="from-domain" value="proxy.Whistlephone.com"/>
   <param name="password" value="xxxx"/>
   <param name="expire-seconds" value="600"/>
   <param name="register" value="true"/>
   <param name="retry-seconds" value="30"/>
</gateway>

 repeat for each proxy server.....

</include>

</code>
------------------------------------------------------------------------