I have this case when there is the Src module with debug info in it, and the blank Dst module. When LinkModules with PreserveSource links Dst and Src, the result becomes invalid: DW_TAG_subprogram record for one particular function with def flag true appears in it twice. So LinkModules would damage the module.
When PreserveSource is replaced with DestroySource, the problem goes away.
There is also no problem if debug info is dropped from Src.
Would this ring a bell? I think you can easily reproduce this on hello-world.cpp with debug info if you modify llvm-link utility to use PreserveSource constant.