It doesn’t say in the spec, unless you interpret the memory dump for his assembled example as residing at address 0x0000 rather than offset 0x0000. But I don’t see any reason why PC shouldn’t refer to a RAM address. It would be great for code economy in such a constrained system.
It's definitely loaded into ram. Some of the operands are defined in terms of "next word of ram", which clearly refers to reading (and incrementing) the PC.
I previously wrote some assembler routines for x86, which is very complex, working with Notch's design is a breeze and actually enjoyable.
Does he somewhere mention if the code is loaded into the RAM? This would make self-modifiable code possible.