It's simple. Listening to the .NET Framework guides at a time actually helps (although a lot of the material in the book is just Java Style Elements again in Redmond Wonderland).
Similar type names should be avoided in the namespaces of cross or in-project / library moves, i.e. mixing between domains and models in general (even in C ++, which is extremely strict and powerful, it also has embodiment in compilers, permissions, and enum-style compiler errors).
Therefore, even a full qualification is not always perfect (and the btw and "use" aliases are extremely limited and at best lead to soft duplication, and also prove the weakness of C # in general programming, etc.).
In my experience, data domain types are the main goal for a more suitable name and therefore for refactoring names:
a) cheap (like a process in rich AST, but simple adt-s support like in C #, right-click in the IDE and feel strong depending on dynamic fans / supporters of the dynamic Ruby type)
[can also be read as: 4.0 dynamic sheep functions will blame everyone, but not think about namespaces or functional JS, C-patterns (not C-c-classes) or the like]
b) conveys semantics better, i.e. intention (i.e. plumbing + support to create your own processing)
c) usually of a primitive but typed nature or message (not OO typed, i.e. criticism in the OO style, as in the aforementioned book, which itself breaks directly from the intro, raises all the βModelsβ to the earth link)
d) and 'aliasing' becomes a useful artifact in cross-domain use (which is actually possible and quite suitable by 2020, for example ... programming of type values)
There are actually no rules, but be careful that you see confusion of namespaces during development when they are least expected. This means only one thing for guided thinking dev: confusion. Plus a few less serious, more compilation and IntelliNonsense errors, of course ..
A tough problem in all languages, so this is your design / naming problem. Even tool suppliers can spoil parsing machines ... say, outputting extended popular IDEs based on outdated browsing information; then again, others do well with managed languages.
Not that I am against duplicating names, there are cases (they are tough, but necessary) when mixing two + interop + representations, etc. other models where the same name makes it more readable; i.e. where duplication is a necessity of double use .. but these are lower level idioms that C # are not friendly or discouraging (re: in favor of overhead).