After doing some more research on this question, I found that there are basically two reasons why a binary sometimes will not work on a different distribution (with the same hardware) and both involve shared libraries. Since the other similar questions have rather obtuse accepted answers that do not make this clear, I am posting a simplified answer here.
(1) The first issue is that shared libraries may be located in a different places on different distributions. This should not matter because applications should always look for libraries on the LD_LIBRARY_PATH. However, apparently some badly written applications do not use LD_LIBRARY_PATH, but instead use a hardcoded path to a library, resulting a distribution-level incompatibility.
(2) The second issue is that shared libraries can vary from distribution to distribution. Usually it is only relatively obscure or advanced functions that are different, but if the application uses an API call that for some reason is in the .so of one distribution, but not present in that of another, then there will be an incompatibility. It's sort of analogous to "DLL hell" on a PC.