Ты угадаешь правильно. Поскольку манипулирующее приложение работает в .net 4.0, а typeof является функцией времени выполнения, оно возвращает тип для текущей версии времени выполнения.
Чтобы это исправить, проще всего создать ссылки для версии mscorlib, на которую ссылается модифицируемый вами модуль, используя Cecil, чтобы открыть сборку. Ваш код станет:
var stringType = _module.TypeSystem.String;
var corlib = (AssemblyNameReference) _module.TypeSystem.Corlib;
var system = _module.AssemblyResolver.Resolve (new AssemblyNameReference ("System", corlib.Version) {
PublicKeyToken = corlib.PublicKeyToken,
});
var generatedCodeAttribute = system.MainModule.GetType ("System.CodeDom.Compiler.GeneratedCodeAttribute");
var generatedCodeCtor = generatedCodeAttribute.Methods.First (m => m.IsConstructor && m.Parameters.Count == 2);
var result = new CustomAttribute (_module.Import (generatedCodeCtor));
result.ConstructorArguments.Add(new CustomAttributeArgument(stringType, "ProcessedBySomething"));
result.ConstructorArguments.Add(new CustomAttributeArgument(stringType, "1.0"));