Wow, that's do deeply nested that I can hardly parse it. I imagine the parser has a similar problem. I think the PHP code version would be shorter, easier to follow, easier to maintain, and quite a bit faster. I don't think either snippet tag has to be called uncached if you won't be adding children often, but try it this way first.
Try this (untested):
On the Page:
Create a chunk called MyWfChunk:
[[!Wayfinder? &startId=`[[+my_start]]` &rowTpl=`sideNav` &outerTpl=`outerTpl`]]
Create a snippet called MySideBar:
<?php
/* MySideBar snippet */
$level = (integer) $modx->runSnippet('GetLevel');
if ($level == 2) {
if ($modx->resource->hasChildren()) {
$start = $modx->resource->get('parent');
} else {
$start = $modx->resource->get('id');
}
$output = $modx->getChunk('MyWfChunk', array('my_start' => $start));
} else {
$output = '';
}
return $output;