I too like Rojo's answer. And Mr. Wizard's answer is intriguing as always. A third possibility is adding the condition that the Head
s of second and third arguments are not Rule
after the LHS. So, the following also works
Options[f] = {"g" -> Identity};
f[x_, y_: 2, z_: 3, OptionsPattern[]] /; (Head[y] =!= Rule && Head[z] =!= Head[z]Rule) :=
OptionValue["g"][x + y + z]
The condition could be alternatively stated as OptionQ[y]=(OptionQ[y] =!=True== True && OptionQ[z] =!=OptionQ[z]= True)
.