Interesting: If I use a lot more complicated XPath instead:
Code:
--page-breaks-before="//*[re:test(name(), '^h2', 'i')]"
I get my page breaks where I want them. (For the inquiring minds: of course I use my h2 tags in lower-case; that 'i' is just something I add to all my regexps by default.)