You have an error there, unless you wanted to include all child controls regardless of whether they're contained.  It should be:

    if (rect.IntersectsWith(ctl.Bounds)) 
    {    
        Selected.Add(ctl);
        Selected.AddRange(ctl.Controls);
    }
    
As for the test, instead of two cases you can use:

    if(rect.IntersectsWith(ctl.Bounds) == bContained)