I took a stab at updating this to 2011 Q2. Here's what I came up with. If anyone has any additional tips to add, or if there's another way to do this, please let me know!
Javascript:
ASPX. Note that you need to use both OnClientNodeExpanded and OnClientNodeCollapsed.
C#
Be sure to set the DataValueField when you're binding your data
Page_Load
Note the "HttpUtility.UrlDecode(nodeValue)". If you've used certain characters in your DataValueField, the value will get encoded and FindNodeByValue will not work. I had used colons to stack the hierarchical IDs and use those for the DataValueField to create unique IDs. The semicolon got encoded as "%3A". HttpUtility.UrlDecode decodes this back to a ":" and finds the matching node.