Let's see if I've understood you correctly....
For the highest average price greater than or equal to the BuyDate and
less than the XBonusDate...
I2:
=MAX(IF(A2:A100>=F2,IF(A2:A100<G2,SUBTOTAL(1,OFFSET(B2:E100,ROW(B2:E100)-
ROW(B2),0,1)))))
....confirmed with CONTROL+SHIFT+ENTER.
For the corresponding date...
J2:
=INDEX(A2:A100,MATCH(1,(A2:A100>=F2)*(A2:A100<G2)*(SUBTOTAL(1,OFFSET(B2:E
100,ROW(B2:E100)-ROW(B2),0,1))=I2),0))
....confirmed with CONTROL+SHIFT=ENTER
For the highest average price greater than or equal to the XBonusDate,
multiplied by 2...
K2:
=MAX(IF(A2:A100>=G2,SUBTOTAL(1,OFFSET(B2:E100,ROW(B2:E100)-ROW(B2),0,1)))
)*H2
....confirmed with CONTROL+SHIFT+ENTER
For the corresponding date...
L2:
=INDEX(A2:A100,MATCH(1,(A2:A100>=G2)*(SUBTOTAL(1,OFFSET(B2:E100,ROW(B2:E1
00)-ROW(B2),0,1))=K2/H2),0))
....confirmed with CONTROL+SHIFT+ENTER
To return the sought after date...
M2:
=IF(I2>K2,J2,L2)
Note that if the highest average price greater than or equal to the
BuyDate and less than the XBonusDate is the same as the highest average
price greater than or equal to the XBonusDate, the date corresponding to
the latter is returned. To return the former instead, use the following
formula...
=IF(I2>=K2,J2,L2)
Also, if for example there are two or more dates tied with the highest
average price, the above formulas (J2 and L2) return the first
occurrence. To return the last occurrence, try the following formulas
instead...
J2:
=LOOKUP(2,1/((A2:A100>=F2)*(A2:A100<G2)*(SUBTOTAL(1,OFFSET(B2:E100,ROW(B2
:E100)-ROW(B2),0,1))=I2)),A2:A100)
....confirmed with just ENTER
L2:
=LOOKUP(2,1/((A2:A100>=G2)*(SUBTOTAL(1,OFFSET(B2:E100,ROW(B2:E100)-ROW(B2
),0,1))=K2/H2)),A2:A100)
....confirmed with just ENTER
Hope this helps!