Which cores correspond to each "CPU" below?
Assuming we have Core 1, 2, 3, and 4, CPU4 and CPU5 represent core 3.
Does (say) CPU 6 and CPU 7 below represent one core; the HT and the real core?
There is no distinction between the two - they both have physical hardware interfaces to the CPU, the logical interface is implemented in hardware (see the Intel Core Processor Datasheet, Volume 1 for more details). Basically, each core has two seperate execution units, but it shares some common resources between them. This is why in certain cases hyperthreading can actually reduce performance.
If, for example, CPU 6 represents a real core and CPU 7 an HT core, will a thread assigned just to just CPU7 get only the left over resources of a real core? (assuming the core is running other tasks)
See above. A thread assigned to ONLY CPU6 or ONLY CPU7 will execute at the exact same speed (assuming the thread does the same work, and the other cores in the processor are at idle). Windows knows about HT-enabled processors, and the process scheduler takes these things into account.
Is the hyperthreaded managed entirely within the processor such that threads are juggled internally? If so, is that at the CPU scope or the core scope? Example: If CPU 6 and 7 represent one core, does it not matter which a process is assigned to because the CPU will assign resources as appropriate to a running thread?
Both. The actual hardware itself does not schedule what cores to run programs on, that's the operating system's job. The CPU itself, however, is responsible for sharing resources between the actual execution units, and Intel dictates how you can write code to make this as efficient as possible.
I notice that long-running single-threaded processes are bounced around cores quite a bit, at least according to task manager. Does this mean that assigning a process to a single core will improve performance by a little bit (by avoiding context switches and cache invalidations, etc.)? If so, can I know I am not assigning to "just a virtual core"?
That is normal behaviour, and no, assigning it to a single core will not improve performance. That being said, if for some reason you want to ensure a single process is only executed on a single, physical core, assign it to any single logical processor.
The reason the process "bounces around" is due to the process scheduler. This is normal behaviour, and you will most likely experience reduced performance by limiting what cores the process can execute on (regardless of how many threads it has), since the process scheduler now has to work harder to make everything work with your imposed restrictions. Yes, this penalty may be negligible in most cases, but the bottom line is unless you have a reason to do this, don't!
Just so you know, every CPU core you see is a "virtual core". Each one has a physical connection to the CPU, the term "virtual" comes from how Windows schedules processes on these CPUs, due to the hardware hyperthreading implementation. See my answer for more details. – Breakthrough – 2011-10-18T21:27:28.913
Also, one last comment for you. "HT is great, but it sure seems to reduce the transparency of resource allocation." This is 100% true, but there is little you can do about it, nor is there much reason for you to do anything about it. All modern operating systems know what hyperthreading is, most have advanced processor schedulers to compensate for it, and aside from few specific cases (and I mean few), there is almost always a performance benefit. – Breakthrough – 2011-10-18T21:32:11.640