Why does StartingNodeOffset make my SiteMap dissappear?
This used to confused me too before I finally understood what was happening. First, let me explain what I'm talking about. Let’s say our SiteMap looks like this:
And in home.aspx we have the following:
<asp:SiteMapDataSource runat="server" id="SiteMapDataSource1"
StartingNodeOffset="1" />
<asp:TreeView runat="server" id="TreeView1"
DataSourceID="SiteMapDataSource1" />
Here's the output:
Now, the same code in page4.aspx and in page10.aspx
So what happened? Well, the SiteMapDataSource needs a new root node for the tree because we requested a StartingNodeOffset. In order to determine this new root node, ASP.NET takes the path to the current node and chooses the next node down from the root node as the new root node. From there, ASP.NET can derive a sub tree that the SiteMapDataSource should represent.
But, in the case of home.aspx, we were at the last node in the chain. The exact same thing would happen if we did this:
<asp:SiteMapDataSource runat="server" id="SiteMapDataSource1"
StartingNodeOffset="1" StartFromCurrentNode="true" />.
The result is that ASP.NET did not have enough nodes in the path to get the new root node, so 'Nothing' was returned and no tree gets rendered:

[StartingNodeOffset="5", page10.aspx]

So when would StartingNodeOffset and StartFromCurrentNode="true" ever be useful together? StartingNodeOffset doesn't have to be positive, it can also be a negative number. Using:
<asp:SiteMapDataSource runat="server" id="SiteMapDataSource1"
StartFromCurrentNode="true" StartingNodeOffset="-3" />
will only show the tree from 3 levels above and downward from wherever you are and thus filtering out potentially large amounts of non-relevant data.