Show only children of current page in submenu
Ran into the same issues you had. Pulled this from a working site I recently built.

Basically you have to get the topmost page. I found entry.getAncestors().level(1).first() works for that no matter what level you're in.

From there, you just get everything that's underneath it. But first check to see if there's actually any children using {% if topLevel.hasDescendants %}

       &lt;! -- local navigation --&gt;

        {% set topLevel = (entry.level == 1) ? entry : entry.getAncestors().level(1).first()  %}

        {# don't show the tree if nothing's under it #}

        {% if topLevel.hasDescendants %}

            &lt;h2&gt;{{topLevel}}&lt;/h2&gt;
            &lt;ul&gt;
            {% set subnav =  topLevel.getDescendants()  %}

            {% nav page in subnav  %}
            {% if page.id != entry.id %}&lt;li&gt;{{ page.getLink() }}&lt;/li&gt;{%else%}&lt;li class="current-page"&gt;{{page}}&lt;/li&gt;{%endif%}

                {% ifchildren %}
                    &lt;ul class="sub-nav"&gt;
                            {% children %}
                        &lt;/ul&gt;
                {% endifchildren %}

            {% endnav %}

            &lt;/ul&gt;

       {% endif %}

     &lt;!-- // local navigation --&gt;