What an interesting topic.
I have Computer Science, Computer Engineering and Electrical Engineering degrees.
In those three disciplines, I studied most of what you're talking about, but I would NEVER claim to know all of what is in a modern computer.
But for reference, in Electrical engineering, you study electronics and electromagnetics. You learn transistor theory and study transistor response times. The basic chemistry of how a transistor is built and how it is laid onto an IC is something they go over. We did some study in one of the EE/CprE crossover courses on transistor response times and how voltage vs gate size affects performance. I could go dig up the equations, they were pretty dense. We studied quantum tunneling (which has a non-trivial impact on today's tiny gates).
We did several labs on lithography and how it is done and we did some basic experiments on building ICs (they were absolutely huge compared to today's modern process).
In Computer Engineering classes, we focused on taking transistors (both "ideal" and "real") in simulations and building logic circuits. The simple layouts for the basic logic operations, OR, AND, NOT, XOR, etc and how that combines to do anything from arithmetic to processor opcode decision trees. How to combine these units into adders of various length and speed. However, in a modern CPU they go to some extreme measures to make this stuff more efficient and I wouldn't claim to be well versed on this.
We designed SDRAM and SRAM chips and ran simulations on them. In the final lab, we built a MIPS-compatible 16-bit microprocessor with 16-bit SDRAM memory using a 4-stage pipeline. In theory, these chips could run some very basic embedded operating systems and included 4 hardware interrupt lines. This was all done in simulation using Verilog VHDL.
In other courses, we studied modern interrupts and how they work, we studied processor performance optimizations and how to implement caches (information about set associativity, transaction lookaside buffers, etc) and we implemented several layered cache architectures in simulations.
Optimizations like out of order operations and lengthening the pipeline. Hardware implementations of speculative execution and SIMD instructions, microcode and some other things were all concepts we put together practical implementations of.
Other courses in Computer Engineering involve coding (using MIPS and 68k assembly) various microprocessor to perform basic functions, ranging from simple math, to realtime control systems.
In Computer Science, we studied everything from formal logic to algorithms. Things like algorithm time complexity and set theory are a standard part of that curriculum and are important for designing systems, but don't fundamentally help you understand how a computer works. On the other hand, courses heavy in operating system design delved into the modern Linux kernel implementation and practical implementation of a monolithic kernel and a microkernel design. We did some heavy code work in the Linux kernel, implementing an alternative task switcher, implementing some tweaks to how drivers are loaded, etc. However, this area is still where I feel the weakest of the whole stack. The space between firmware (which I understand pretty well). Another course involved delving into compiler design and compiler functionality.
Of course, I also did the higher level programming work in Java, C++ and did some personal projects in a few other languages. I implemented a medical records system for some researchers on camps in a really slick (for the time) Windows GUI that I think is still in use for managing human trials and drug testing results for that department.
In my aborted attempt to get a Masters in Computer Engineering, I focused on information security, did courses on Radio Frequency communication and dissected 802.11 from software down to firmware down to hardware and then back up to protocol design and security. I did some research on network stack performance and how building multiple TCP streams in parallel and then alternating streams for transmission actually makes modern implementations of TCP window sizing and congestion backoff much more efficient, resilient to data loss, more "fair" from a sharing standpoint, and faster.
But anyway, all I'm saying is that I regard my background as pretty extensive - and I hardly would claim to be able to build a modern PC from scratch. In fact, very far from it, even given nearly unlimited time.
HOWEVER, I think I could build an 80386 processor from scratch. I could probably build a really simple Linux clone. I could build the RAM and a peripheral bus and have it light up some lights. I'm sure there are a few gaps that I would have trouble with, even trying to build a simple 8088-based IBM XT system, though I suspect i could get close.
For example, building a video framebuffer that can switch modes. Exactly how the sync signals on the wire interact with the electron tubes in a CRT monitor? What about graphics modes that use a framebuffer? I *think* I know how it works, but I'm certain there are some areas I don't understand.
Also, a modem... I know the theory behind the standard QAM (a phase+amplitude RF modulation) encoding and I've done work analyzing the signals from various levels, but I'm still fairly sure I don't know how to implement a complex integrated circuit to actually generate those QAM signals. The PLLs involved in picking up an analog carrier signal and locking onto it are something I've designed (a long time ago), but how to use that to pick up phase variances on the wire... and implement that in silicon... Hmmmm, not quite sure. I know I could build an RS-232 serial port with a FIFO buffer, those are pretty simple, but it would be slow as hell at first. The old 300 bps ports aren't too complicated, but jacking the speed up to a modern 225k speed serial port is pretty difficult (even if it is OLD technology by modern standards)
Also, disk drives. I didn't do enough applied physics focused on magnetic storage medium. We talked about giant magnetoresistive effects and how they *might* be used to store data on a platter, but the chemistry that goes into the drive platter coatings... the highly sensitive stepper motors that control the heads of the drives, the aplification technology to translate the subtle signals picked up by the drive head. This is all complicated stuff.
I haven't even got into just the process of laying down a 7-15 layer PCB that is used in modern motherboards and all the impedance matching that goes into the trace layouts on that kind of PCB.
And in the voltage regulation and transformers. I've certainly built an AC/DC transformer with multiple voltage outputs, but it was really inefficient. The modern switching power supplies are pretty cool engineering themselves. Beyond that, the voltage regulation on motherboards are also something you build in a decent Electrical Engineering lab, but the precision of the digital-voltage switching on a modern motherboard is pretty damn cool, and I'm not quite sure exactly how they work.
Wow... I think I went on for awhile. I'll leave it at that.