JEN,
From your second post in this thread, I assume you will be doing .NET development, is that correct ? I'm asking because upgrading to VS.NET does not automatically mean you'll develop for .NET. It is still perfectly possible to write native software in VS.NET 2003.
Last year, between two projects (I'm a contract programmer), I had the opportunity to learn .NET, and I got the freedom to choose whatever programming language I wanted. Maybe my findings can help you.
Since I had an extensive C background (about 5 years of professional experience), and I always wanted to learn C++ but never got around to do it, I chose C++.NET.
I was also in charge of coordinating a small .NET development team, and as a proof of concept, other team members chose other languages (VB.NET and C#). The plan was to integrate several pieces of code, all written in different languages, in one project. Also important to know is that VS.NET 2003 was not available at that time, we used the first edition of VS.NET.
To make a long story short, after a while we all used C#.
Part of the reason was that C# was much better supported in the VS.NET IDE. For example, with C++.NET, there was no graphical forms designer, much more restricted IntelliSense usage, no graphical code outlines, etc... Some of these things are probably improved in VS.NET 2003, but since I never used this version I can't tell for sure.
I would recommend this: for any new development in .NET, use C#: not only is it better supported in the IDE, but it's also much easier. You'll be more productive when you don't have to think about boxing/unboxing, using different operaters for value and reference types, pointers, __gc operators, and lots of other things you always have to keep in mind when doing C++.NET development. C++ isn't an easy language to begin with (especially coming from VB), and the managed extensions Microsoft added to it make it even more complex. Keep in mind that you can not only mix managed (.NET) and unmanaged (native Win32) code, but also mix managed (garbage collected) and unmanaged (non-garbage collected) data. You can even mix managed and unmanaged members within a class ! And then you still have to write proper destructors for the unmanaged types.
Just for fun, see if you can get your hands on the book "Essential Guide to Managed Extensions for C++" by Apress (ISBN 1893115283). If your head isn't spinning by the time you get halfway through this book, you can consider using C++.NET.

C++.NET fits one particular purpose very well: if you already have legacy C++ code that you want to expose to .NET (e.g. for usage within another .NET program), you can use C++.NET to wrap the existing native classes in managed classes. This way, you can reuse existing C++ code when moving to .NET. For new development, I think C# is the way to go.
I also recommend C# over VB.NET. As you already mentioned, VB.NET is quite different from VB6 anyway, so learning C# probably won't take much more time than learning VB.NET, and at least with C# you can use almost everything the .NET environment exposes. For example, IIRC you cannot automatically generate XML documentation with VB.NET, but you can with C#.