Forgot to say why it doesn't work normally: When you use an array function in Excel (or with the Evaluate procedure) then Excel understands you are using array functions and so the sub results of the various parameters are arrays themselves. But if you have
        ' Solution option 3
        s.Cells(3, 3) = .SumProduct((NameValue = s.Cells(3, 1)) * (DateValuea = s.Cells(3, 2)) * ReturnRange)
then then individual parameters are being calculated as a normal value before being passed to the SumProduct function, so the SumProduct function never sees arrays.

You could do it differently by building the arrays and passing these to SumProduct (or Match etc) as described by Andrew Poulson in mrexcel.com/forum/excel-questions/47370-sumproduct-visual-basic-applications.html

Function xxx(x, y)
    Dim WF As WorksheetFunction
    Dim a As Range, b As Range, c As Range
    Dim Arr1 As Variant, Arr2 As Variant, Arr3 As Variant
    Dim i As Integer
    Set WF = Application.WorksheetFunction
    Set a = Range("A4:A14")
    Set b = Range("B4:B14")
    Set c = Range("C4:C14")
    Arr1 = WF.Transpose(a)
    For i = 1 To UBound(Arr1)
        If Arr1(i) = x Then
            Arr1(i) = 1
        Else
            Arr1(i) = 0
        End If
    Next i
    Arr2 = WF.Transpose(b)
    For i = 1 To UBound(Arr2)
        If Arr2(i) = y Then
            Arr2(i) = 1
        Else
            Arr2(i) = 0
        End If
    Next i
    Arr3 = WF.Transpose(c)
    xxx = WF.SumProduct(Arr1, Arr2, Arr3)
End Function