Note that in my machine (Linux), "processors" 0 and 2 are in the same physical core, and "processors" 1 and 3 in the other physical core. I'm not sure how the numbering goes in Windows, but it might make sense to check to be sure.
How can the CPU be at 100% when 8 tasks run on 16 logical cores.
It shouldn't be possible (unless there were at least 8 other tasks using CPU at the same time). Sounds like the CPU load calculation is a bit wonky? Maybe check the documentation of the utility you use to display it, for gotchas?
(I'm not sure, but BOINC itself might be displaying the percentage of time it does calculations, compared to the time it can run. Or it could be displaying something like the fraction of elapsed CPU time to elapsed wall clock time. It is annoying, but knowing exactly what each figure means, and how it is calculated, makes a big difference here.)
If my boinc WU's take the same amount of time with 16 tasks on 16 logical cores as 8 tasks on 8 actual cores
Which time, wall clock time, or time running on a CPU?
If you mean each individual work unit completes in the same wall clock time in either configuration, then your computer can fully utilize all 16 threads on 8 cores.
If you mean each individual work unit requires the same amount of processing time to complete in either configuration, then your computer has
either enough arithmetic-logic units to not starve any of the BOINC tasks, not even when two of them run on sibling threads on the same core;
or so few arithmetic-logic units that running anything arithmetic-intensive on one thread fully stalls any arithmetic on the sibling thread on thesame core.
Comparing the number of BOINC work units completed per wall clock time unit (in the entire computer, not per task!), in the different configurations, is the important metric here. As in "the computer completes
N WUs per hour when running 8 threads on 8 physical cores, and
M WUs per hour when running 16 threads."
When I run benchmarks, for a number of reasons I use the number of work units completed divided by the elapsed wall clock time as the metric. This absolutely requires that the machine is otherwise idle, as any other running tasks will throw off the measurement, but the measurement makes most practical sense.