You have an issue while adding search term predicate to your query.

You just have your main query and you add `OR Title Like SearchTerm OR ...` so it's enough that title contains search term and none of the other conditions is needed to evaluate to `true`:

	if (!string.IsNullOrWhiteSpace(searchTerm))
	{
		andPredicate = andPredicate.And(x => x.Title.Like(searchTerm, 0.75f));

		foreach (var t in searchTerm.Split(' '))
		{
			var tempTerm = t;
			andPredicate = andPredicate.Or(p => p.Title.MatchWildcard(tempTerm + "*").Boost(5.5f));
			andPredicate = andPredicate.Or(p => p.Title.MatchWildcard(tempTerm + "*"));
			andPredicate = andPredicate.Or(p => p.Title.Equals(tempTerm));
		}
	}
	
Instead it should be:

	if (!string.IsNullOrWhiteSpace(searchTerm))
	{
		var titlePredicate = PredicateBuilder.False<ProductSearchResultItem>();
		titlePredicate = titlePredicate.Or(x => x.Title.Like(searchTerm, 0.75f));

		foreach (var t in searchTerm.Split(' '))
		{
			var tempTerm = t;
			titlePredicate = titlePredicate.Or(p => p.Title.MatchWildcard(tempTerm + "*").Boost(5.5f));
			titlePredicate = titlePredicate.Or(p => p.Title.MatchWildcard(tempTerm + "*"));
			titlePredicate = titlePredicate.Or(p => p.Title.Equals(tempTerm));
		}

		andPredicate = andPredicate.And(titlePredicate);
	}