I have managed to extract the following information from this pushpool solution:
What parts of that information (and in what order?) needs to be hashed by way of sha256 twice to come up with that block's hash?
The data I have found seems to be correct for the block in question, but how do I come up with the block hash from that information alone? Or is it even possible?
Looks like we are at the same stage of understanding bitcoin
This sunday I am working on exactly the same issue. I found three aspects helpful:
1) The decription at https://en.bitcoin.it/wiki/Block_hashing_algorithm
gives a rough idea
2) Reading the source of the satoshi implementation is...um...a good exercise in c++ fluency. However it is helpful for this question. The issue is: You have to get all the endian-nesses and all the sequences right. Satoshi implements an elaborate serialization concept and derives the has from there.
3) Probably the most helpful thing in this regards is the pastebin reference from (1) http://pastebin.com/n8UEGA86
It contains a c implementation of exactly the part you are looking into. I did not try it myself (but probably will do so eventually).
That said, let me make a general recommendation: Read the Satoshi implementation.
It is not well documented, has a file structuring which is quite hard to read, uses boost library calls and has all kinds of twists and turns. However, it does pay off. Satoshi has numerous twists and turns and ideas and it takes a while to understand those. But it is not only every elegant (you can learn something about programming...) - it also contributes to the security and stability of the system.
I would recommend against php based implementations. And I would recommend against doing own implementations in bitcoin before you have completely digested the concepts in the Satoshi implementation. It took me 6 weeks of debug instrumentation, code commenting, code analysis and more - and as a result of this I ended up with this opinion.