Thank you very much for taking the time to perform all these tests. We have done some further analysis and believe this is a manifestation of another bug we recently isolated internally and fixed in the parser. The bug was due to an uninitialized variable in the parser, which would cause it to sometimes take a non-zero garbage value. When that happens, the function being parsed is marked as if it is declared inline, which causes it to be output first, thereby affecting the ordering of functions in the .asm file.
This bug is fixed in compiler release 5.1.3 and higher. I ran your build with version 5.1.5 and could not reproduce the issue. Could you update your compiler tools to 5.1.5 and confirm that is fixes the issue in your environment? You should be able to get compiler tools 5.1.5 through CCS by going to menu Help->Check for Updates.
Thanks for your patience and efforts in getting us a reproducible test case.