Return table and item-list, but only table is displayed
Your are mixing render arrays and html, use for both table and itemlist the same:

$build['itemlist'] = array(
        '#theme' =&gt; 'item_list',
        '#type' =&gt; 'ul',
        '#items' =&gt; $products,
        ...,
);