Yes, you are right. I am guessing there were just too much legacy associated with these to move them into another namespace.
For mystery #2, using declaration introduces the name to the current scope while using directive makes the name visible in the current scope.
So for the first code snippet, the definition of the integer vector hides the definition of vector in std. For the second code snippet, using declaration brings the name vector in to the local scope and the definition of the integer vector causes a conflict.
For mystery #3, I am not aware of any problem puting using declaration/directive in function scope. It is not a good iead to put them in the file scope of a header file though. Adding them in the header file will potentially pollute the declarative scope of any files including the header file. Puting them in header file ahead of include can cause more problem because the names brought in are now visible in all included files, which might cause conflict or change the semantics. It's generally better to use qualified name such as std::vector in header files.
Yes, that is correct. The using directive effectively makes the names available from the namespace, making them accessible without qualification. It also makes it as if they were declared at global scope, not at the scope of the using directive. So as a result, local names will hide the namespace names.
The names also remain in force until the end of the function body.
Using declaration is less forceful and provides a middle ground between explicit qualification, and bulldozing your namespace with all the names. A using declaration is an actual declaration, and any local names that are not the same type will lead to a redeclaration error. This is what you observed in the second code snippet.
From this discussion, it is pretty clear that a using-declaration requires that the name it declare must have already been seen. This makes a using-declaration order dependent when using names from a namespace split across a group of header files. This is potentially bad. The order of header inclusion relative to where the using-declaration appears is important and can change. Of course, the std namespace is one such namespace that is split across multiple headers.
So here is another difference with a using directive. Unlike a using-declaration, a using directive brings in names declared in namespaces both before and after the using directive. The name's declaration has to be still seen for it to be used, of course. This also makes using-directive powerful, and deadly in a different way then a using-declaration.
Nice work!
So from the answer to MOM#2, we can see that a using directive is like using a sledge hammer to your namespace, while a using declaration can be evil in that it depends on the order of includes.
I think I defintely agree that function scope is probably the best way to use it. The same goes for not ever putting either of them in header files. In one case, they bring in all kinds of names. In the other case, we have order dependency problems.
As for the middle two choices, either before or after the include in your CU, I would say definitely never use either of them before the #include. This is agreed by some noted authors.
As for after the include, I can't really think of a reason to discourage their use as long as it makes sense for your use.

For mystery #1, aside from the C standard library macros, the operators new and delete in <new> come to mind.