I'm a front-end Magento dev, have built quite a few of my own themes and I want to understand Magento's XML block positioning better...

I normally use a local.xml file to manipulate everything, I can define a block as follows:

<cms_index_index>
   <reference name="root">
      <block type="core/template" name="example_block" as="exampleBlock" template="page/html/example-block.phtml"/>
   </reference>
</cms_index_index>

This would create a block on the home page (cms_index_index) and since the block is created one level under root, I would normally call the block by adding:

<?php echo $this->getChildHtml('exampleBlock') ?>

...to 1column.phtml (or 2columns-left/right.phtml, 3columns.phtml etc). The block can be placed on any page by substituting cms_index_index for the appropriate page tag.

I see stuff like the following throughout the core XML files, and in tutorials:

<reference name="root">
   <block type="core/template" name="example_block" before="content" template="page/html/example-block.phtml"/>
</reference>

content is a block which is part of magento's general page structure and, from what I understand, before="content" should place it where you'd expect, without needing to use getChildHtml('exampleBlock'), so far so good... however, before/after hardly ever seems to work for me, and I frequently find myself resorting to the getChildHtml method as backup, which isn't always ideal, and means editing more .phtml files than necessary.

I've tried:

<reference name="root">
   <block type="core/template" name="example_block" before="content" template="page/html/example-block.phtml"/>
</reference>
Edit
Report