Sorry, I had forgotten that things have changed somewhat in the 2.2 Update 1 version of the product. With the Update 1 version you should find that, instead of all the cryptic messages that you report, you will get a simple message: ILSMARTLINKAGE class 'xxx' has multiple definitions.
Obviously this is better, but doesn't help you a great deal.
So, when the project contains multiple programs referring to the same named linkage record (and ILSMARTLINKAGE is on), currently the compiler will give 'duplicate class' type errors, because it is attempting to generate multiple versions of the same ILSMARTLINKAGE class.
One way of avoiding this is to use the additional ILSMARTNEST directive. This causes these ILSMARTLINKAGE classes to be generated as nested classes within the class generated for the individual procedural COBOL program, and therefore disambiguates them.
The only downside to this is that, for instance, a C# program that wants to call different COBOL programs using the same linkage records will have to construct instances of different classes for each program.