I've edited and trimmed this to try and get it closed because the site is prompting me to accept an answer or add a bounty.
I did an experiment which had calls to GetUserStoreForAssembly and GetUserStoreForDomain in a library referenced by a console app but didn't understand why I was getting more stores than I expected in one case and less in another.
Preet helped me tune my experiment and I ended up with two slightly differnt issues:
when I copied the console app to another directory (so the name remained the same), I got two user/assembly stores i.e. one per copy when I expected them to share
when I loaded my library into multiple domains within the console app they all still used the same user/assembly/domain store when I expected them to not share
By then, the question was cold. I did my own reading and I thought I found the answers so answered the question myself hoping someone would confirm/correct. But it was so far down the list there was no chance. I was just going to leave it but then got prompted to accept or add bounty.
So I've moved my answer here and now just need someone to add some helpful comment either confirming or correcting so I can accept it and know that this will actually be useful to anyone else wanting to better understand isolated storage:
Possible answer to first question:
Strong named assemblies are of course identified by their strong name. Weakly named (not sure if that's an official term but whatever) are identified by their URL or file location. So the same weakly named assmebly copied to a different directory will have it's own separate isolated store.
Possible answeranswer to second question (less certain about this one):
The scope returned by GetUserStoreForDomain is restricted to the machine, user, application and assembly, specifically that assembly running within a specific application.
My experiment created multiple additional domains but they are all in the same application. Therefore, they are all using the same domain store.
Therefore, to simulate domain isolation, I actually need to reference the library from two different console applications.
And this will only work properly if the library (and hence both console applications) are strong named. Referencing an assembly results in it being copied meaning if it's weakly named it will have a seperate isolation store.
I just tried the whole experiment out with strong naming I now get 2 domain stores and 1 assembly store as expected.