It's pretty complex question (about target dependency and variables travelling) and answer can be a full blown article or presentation about msbuild if we dig into details.
I'll try to answer your code-sample questions and try be as brief as possible. Feel free to ask more about details.
AddModules is not invalid inside PropertyGroup - you just created a new property with the name AddModules.
According to what I found - csc task looking for item with name AddModule, not property one. To be simple - Msbuild Items is kind of array, property is string. @(AddModule) syntax mean that it's expecting array of entries (which will be joined to comma-separated string with @() construction )
Properties doesn't have Include attribute, Only Condition is allowed.Check this reference
ReferencePath is a property in that case (I think), it doesn't contain metadata at all. There will be a item with that name after ResolveAssemblyReference target will be called. In this case I think it hadn't called yet.
Remove attribute applicable only to "file"-type members, not for arbitrary string-type members. But I still suspect this error is because you don't have @(ReferencePath) item yet on that moment.Check this reference about little more details into Remove attribute.
It is not invalid. It's just the name of variable. So it's completely legit there.
Because csc expects item as parameter, and this statement creates it and emits as global variable. Every target that will be triggered in that same context could have access to this very item using @(AddModule) syntax