You should use MaxBy()
from herehere, which is taken from MoreLINQ.
var items = rep.FindWhere(i => i.ID == itemID)
.Select(i => i.Batch)
.SelectMany(b => b.Items);
var NextItem = items.Where(i => i.StatusID == (short) ItemStatus.Pending)
.MaxBy(i => i.NumInBatch);
return NextItem.ID;