Exactly right. AddDependency is for telling the pipeline about additional work that you did, so it can do the right thing when considering subsequent rebuilds. This doesn't actually do any work itself other than tracking the supplied filename and timestamp of that file.
If a file is both in your content project directly and also read using BuildAndLoadAsset, this will normally get imported just once, and the importer results cached in the intermediate directory. The request coming from the content project will then cause this cached data to be deserialised, run through the processor, and the outputs written to the final output folder. The request(s) coming from BuildAndLoadAsset will then cause the cached data to be processed a second time, and the processed results cached back in th intermediate folder, from where it can be deserialized as many times as are required by BuildAndLoadAsset calls. So you will typically see the importer run just once (unless this particular importer specifies CacheImportedData = false), but the processor will run twice.
There's obviously room for us to be smarter about this particular scenario, but it didn't seem an important thing to optimize for since it's quite rare you would want the same asset built using the same processor, but one copy sent directly to the output folder and a second copy of that same data embedded inside some other asset. Most commonly files referenced using BuildAndLoadAsset will not also be built directly to the final output folder.
XNA Framework Developer -
blog -
homepage