Refactor a legacy application to a less-unwieldy state
I would put:   

var ListItems = new List&lt;ListItem&gt;();
//Yes this is silly since statusReturn is never used
var statusReturn = _Permissions.GetReportsForUserGroupName(userGroup, ref ListItems);


in a method that just returns the list. So you are isolating the madness a bit.

I'm not a C# programmer, but wouldn't listItems be better than ListItems?

I honestly did not understand what the code is doing.  Maybe you could explain it a little bit in your post.  

It seems that you have a tree structure in there.  So why transform a list which originally seems to contain a tree to another list, which should also be a tree?