Вы можете использовать
<div class="row">
<div class="col-sm-3" ng-repeat="grpMenuItem in category.menuItems">
{{grpMenuItem.itemName}}
</div>
</div>
, чтобы получить 4 столбца одинаковой ширины.
Если вам нужен каждый из 4 столбцов в отдельных строках, вы можете попробовать следующее
<div ng-repeat="grpMenuItem in category.menuItems" class="row" ng-if="$index<category.menuItems.length/4+1">
<div ng-repeat="grpMenuItem in category.menuItems" class="col-sm-3" ng-if="$index>=4*$parent.$index && $index <= 4*($parent.$index+1)-1">
</div>
</div>
Демо
В вашем коде проблема заключалась в том, что menuItem - это массив, поэтому вы должны получить значение itemName следующим образом
<div ng-repeat="grpMenuItem in groupMenuCategories" class="row" ng-if="$index<groupMenuCategories.length/4+1">
<div ng-repeat="grpMenuItem in groupMenuCategories" class="col-sm-3" ng-if="$index>=4*$parent.$index && $index <= 4*($parent.$index+1)-1">
<h4>{{grpMenuItem.menuItems[0].itemName}}</h4>
</div>
</div>
Обновлен плункер