If XML child element value contains string return other child element value at same level
Use nodes() and value() to get the names and count in a derived table and filter your rows in the main query.

declare @T table(itemStates xml not null);

insert into @T (itemStates)
values ('&lt;itemStats xmlns="http://www.blahblahblah.com/blah"&gt;
           &lt;itemCounts&gt;
             &lt;item&gt;
               &lt;name&gt;Toaster Oven Device&lt;/name&gt;
               &lt;count&gt;6&lt;/count&gt;
             &lt;/item&gt;
             &lt;item&gt;
               &lt;name&gt;Washing Machine&lt;/name&gt;
               &lt;count&gt;2&lt;/count&gt;
             &lt;/item&gt;
             &lt;item&gt;
               &lt;name&gt;Microwave Oven&lt;/name&gt;
               &lt;count&gt;4&lt;/count&gt;
             &lt;/item&gt;
           &lt;/itemCounts&gt;
         &lt;/itemStats&gt;');

with xmlnamespaces(default 'http://www.blahblahblah.com/blah')
select T.Name,
       T.Count
from (
     select I.X.value('(name/text())[1]', 'nvarchar(max)') as Name,
            I.X.value('(count/text())[1]', 'int') as Count
     from @T as T
       cross apply T.itemStates.nodes('/itemStats/itemCounts/item') as I(X)
     ) as T
where T.Name like '%Oven%';