Correct (at least if they depend on it directly/indirectly through Concurrency).
libclosure and libdispatch are not Swift libraries, they are C libraries. They can and are used outside of Swift. If you are hosted within an application which uses these, they should not be duplicated in the address space. As such, dynamically linked ensures that a C program can host a statically linked Swift binary.
No, the static runtime will still dynamically link against msvcrt, msvcprt, vcruntime, ucrt, kernel32, and ntdll at the very least.
A fully static binary is not entirely possible on Windows - kernel32 and ntdll are nearly impossible to get away from. It is possible to statically link against libdispatch and libclosure, but that would require an additional SDK build.
As it is, currently, it is not possible to link against any of the debug variant of the standard library. That currently is something that is a TODO and requires 2 additional SDK builds at least (swiftCored.dll and libswiftCored.lib as the generated artifacts and the associated libraries for them). However, in order to control the explosion of possibilities, I expect that they will also require the debug variant of the C/C++ runtimes as there is no ABI compatibility between the debug and release variants of the MS runtimes.
Currently, we have 3 architectures x {static, dynamic} x {debug, release} or 12 SDK builds (of which we are currently building 6 as the debug builds are not possible today).
Adding in the additional configuration that you are suggesting - static libclosure and libdispatch variant would add in an additional 6 builds. But it would still not be fully static (as you cannot statically link against the system libraries), and so I am not sure how much value that brings.
Ultimately, Windows as a platform really prefers dynamic linking, much like macOS does. It is just that macOS does not incur the same penalties of distribution given that these are considered system libraries.