When would I need the Windows SDK over just the regular API?
The SDK includes headers, libraries, tools, etc., that give you access to the API (and to .NET, for that matter). For example, a typical API-based program will start with #include <windows.h>
-- but without the SDK, you don't have a copy of Windows.h to include. Likewise, the SDK includes the compilers (the same actual compilers included in the current version of Visual C++), linkers, debuggers, etc., necessary to actually build an API-based program.
And what is .NET and why would I need it?
.NET is a couple of things: a virtual machine that executes code in what Microsoft calls "intermediate language" (IL). It's also a (large) library of code in IL for everything from window management and drawing to communications, system management, etc.
You'd need it primarily if you were writing code in a .NET-based language such as C#, VB.NET, etc.
What is so special about C# and should I use that over C/C++?
C# is Microsoft's favorite flavor, so to speak. It's a language they invented themselves that they generally promote over most of the alternatives as the primary language for use under .NET (and, although rarely stated directly, at least by implication, for any new development). While there were originally accusations that C# was little more than a rip-off of Java, it's actually had a few features for which Java had no counterpart (e.g., delegates) and has since added more (e.g., language-integrated query).
As to whether to use C# over C or C++, that's likely to depend heavily on the sort of code you write. C# gives you access to the .NET library, which contains a truly huge amount of pre-written code. If the things you need to do in your application(s) fall almost entirely within the range supported by the .NET library, being able to use that code may make your job substantially easier. A few features of C# have no direct counterpart in C or C++ either, so if your code can benefit greater from those features, C# might make such a job a great deal easier. Finally, Microsoft concentrates a great deal of effort in their support infrastructure on C#, so many of their tools (including, but certainly not limited to, Visual Studio) are basically written to support C#, and tend to do less to support other languages.
OTOH, if you want to do things for which .NET does not provide pre-written code, the situation can change quite quickly. C# does support a mechanism (called P/Invoke) to let you use things like operating system functions for which .NET doesn't provide wrappers. Unfortunately, P/Invoke tends to be fairly painful to use -- if you have to use it very much at all, there's a good chance that C++ (or maybe even C) would be more productive.
I should also mention that while it appears Microsoft has dedicated more resources to new development of C# than other languages, they're still clearly doing new development of C++ and their MFC application framework as well. There's no question that in terms of sheer quantity of new code, they're clearly doing more with .NET. Nonetheless, some of the new developments in MFC happen to be in areas that they have not developed in .NET, so MFC has a few capabilities for which .NET provides no counterpart.