We had a good bash at this very subject back in March in the
What is and what is not procedural content generation? thread.
I'll reiterate what I said there: "procedural content generation" is actually two things: the generation of random numbers within specific constraints, and code systems -- "procedures" -- understand how to render those carefully constrained numbers.
Proceduralism is an alternative to encoding all behaviors as programming code. Splitting the input data (and its randomized generation) from the display code makes it easier to change your number generation methods as well as to change your output rendering code -- as long as the input interface doesn't change, there's less chance of breakage.
Also, if you only need to distribute the rendering code (because users will generate their own numbers), it can be considerably smaller than a monolithic package containing both code and data. This is the theory behind the
64K demos -- their outputs were impressive despite their small size because they used procedural generation techniques.
So what I'm saying is that the random number generation part is important, but it's not "procedural content" all by itself -- for that, you also need the code that knows how to turn those carefully constrained numbers into images and sounds.