[Galaxy Note 4 Android Development (Snapdragon)] fattire:
FWIW different phones may have different internal antennas and therefore different results as far as reception goes (My phone almost always gets perfect reception when others in the same building with the same provider but different phones have really low/spotty signals) but since you only have the issues with lineage, I'm guessing you're right-- its' probably the software itself.

So, and this is also in response to the person above who asked about different versions of the phone-- not only are different phones using different hardware, but also different phones with identical hardware sometimes have to have different software for different networks and regions-- some regional laws require certain features turned on/off (for example, I believe in the US the camera is always required to make a noise when triggered-- not so in other countries). Also different frequency ranges (channels) are used in different countries for wifi. Channel 14 will piss off the FCC in the US but may be perfectly fine in say, Japan. And then there are the frequency ranges/networks supported by every region for mobile. There are other configurations that will be per version of the phone. And this is, like I said-- not counting physical differences between phones, which may require different software settings.

Those different settings can be found primarily in two places. The first is in the kernel, which share the same source code, but rely on different build configuration files. These are files that say what are turned on/off when the build is happening, and they result in a different version of the kernel specifically for the device. You can see the different model's configuration files here. Specifically the files named apq8084_sec_trlte_*_defconfig, where the * is either eur, spr, tmo, or vzw. You can look inside those files and see specific and unique configurations for the particular requirements for that network. This is one place where a setting may be different for YOUR phone from tmobile's. If you'd like to check, the best way is to get the kernel for your stock device from Samsung (they are obligated to give it to you) and do a comparison between the defconfig in that code and the tmo one I linked to.

So the kernel is one place where things might be different on your phone compared with a regular tmo phone. A second place to look is in the repository of "recipe" files collected for each flavor of the device (TMO, eur, etc). You can find those device repositories here. As with the kernel configuration files, you will see unique code repositories with a name like android_device_samsung_trltexx or android_device_samsung_trltetmo. The android_device_samsung_trltetmo one contains Android (note-- not kernel, but Android itself) build files and configurations that are unique to the tmo version of Android. For example, system.prop on tmo is slightly different from the one for trltexx (the eur version) .

A third place where differences might be found is in the "blob" files that originate in the stock version of the firmware and are found in the vendor/samsung directory when you are building Android. Again, since these files are unique to each phone model/flavor, you might try substituting them with files from your working stock device. You may find that one of the files from the original stock software might magically stabilize the connection. Of particular interest are files with "ril" in the name (such as libril.so) which deal directly with the radio interface (ie, the mobile stuff). You may have some slightly different version that would affect signal strength, so maybe look to the stock device to compare if yours are different.

Without having the specific device you have, there's no real way for a developer to do any tests to see which of these issues it might be.

The best place to start to figure out which area the problem might be is to carefully look at the logs because they'll usually say something like "hey! The error is over here!" and that can direct your attention towards one or another of the above places.

The "dmesg" command gives you kernel-related messages. Usually when you see an error in dmesg, you can do a search in the kernel source for the code that gives the error and you'll have a clue about where the problem might be.

The logcat gives you issues with Android itself-- and that might suggest a problem with the device repositories I mentioned. The binary blobs might create errors in either dmesg or in Android (or in both) but the errors will really be helpful in targeting what the problem could be.

That's why it's so helpful to be able to show everyone "when I lose the signal, you see THIS MESSAGE in the logcat. But nothing shows up in dmesg" or vice versa. The error will lead the way, but only someone with an actual device having the problem will be best able to track it down. Unless of course the error is so clear and obvious that the solution is apparent...

One last thought- make sure that you've updated the firmware and modem sw on your phone to the latest offered by Samsung (see here). You'd use software like Odin or Heimdall to do this. You don't want to install any version other than the one for your particular canadian phone so it should start with N910W8... and look like something like N910W8VLS1DQH2. If you don't know which version you have-- you can see About Phone under Modem version or something and it will tell you. Make sure it's the same one that the most recent version of the stock OS would show. You want to be up-to-date here.

Incidentally, the code that displays the w8 information is here. Basically the trltetmo, if it detects from the firmware a trltecan, will show t910w8. But the rest of everything is identical to the 910T and maybe it shouldn't be...?

Hope this helps.