На мой взгляд, лучший (и рекомендуемый) способ - использовать XamlWriter / XamlReader с LINQ to XML.
Например:
string templateXaml = XamlWriter.Save(template);
XElement xData = XElement.Parse(templateXaml);
XElement xpanel = xData.XPathSelectElements("//*[@IsItemsHost]").FirstOrDefault();
При этом будет найден элемент xaml с существующим атрибутом IsItemsHost.
Затем, если вы хотите программно проверить его как объект зависимости, преобразуйте его следующим образом:
Panel panel = (Panel) XamlReader.Parse(xpanel.ToString());
//example, discover which panel Type it actually is
Type panelType = panel.GetType();
EDIT
Кроме того, чтобы ответить на ваш вопрос напрямую, дополнительно вы должны написать код, подобный этому:
IEnumerable<XElement> typedElements = xData.XPathSelectElements("//SpecificType");
foreach(XElement el in typedElements)
{
DependencyObject dObj = (DependencyObject) XamlReader.Parse(el.ToString());
//do something with dObj
}