IsDublicated все время возвращает false потому что написана неверно. Вы инициализируете флаг потом возвращаете его без изменений.
Попробуйте так
public async Task<bool> IsDublicated(string label)
{
var existedProduct = await _context.Set<Product>()
.FirstOrDefaultAsync(property => property.Label.ToLower() == label.ToLower());
return existedProduct != null;
}
И в функции AddAsync у вас неверное условие. Должно быть:
if (await _unitOfWork.ProductRepository.IsDublicated(product.Label))
{
throw new DataDublication("Label already exists.");
}