Well, this may be considered as a 'better wheel' because the other 'wheel' does not turn well. If you closely observe the results produced by this function and compare it with the output of OPENXML() you can see a number of differences.
In addition, OPENXML() can process only one XML document at a time. If you want to process all XML documents stored in an XML column, you will need a WHILE LOOP. You need a 3 step process to call OPENXML() - prepare, query, clean. OPENXML() cannot be used within functions. if you forget to call the clean up procedure, you might end up with memory leaks. OPENXML() also allocates (actually the call to sp_xml_preparedocument) 1/8 of the total server memory for XML cache.
The function being discussed here, uses XQuery and a recursive CTE to process all the elements and attributes of the given XML document. It can be used in a SET based query. You dont need a loop to process all the XML documents stored in an XML column. The additional columns such as XPath, ParentNode etc allows to quickly query the pieces that one is looking for.
I do not intend to claim that this is better than any other approaches. This is just one way of querying XML documents and comes with its own set of PROS and CONS. Just like any other method or approach we use in our programming tasks, if this is found to be helpful in a given scenario let us use it.