-5.04 is a valid answer considering that you did not constrain the search range. Perhaps you want
xdatax = fzero(@(xf)interp1(x,y,xf,'spline')-yy,[min(x) max(x)])
Note that this will give an error if y(1)-yy is the same sign as y(end)-yy
Also, there are values such as 0.9 that occur multiple times; your code does not define which of the values will be located.
With spline fit, you are going to get "overcorrections". If, for example, you have a line that angles up to the right and it has a peak, then the spline will typically have its peak a little higher, because splines do not have sharp angles. This can result in false matches.
I suggest you reconsider your algorithm. The false matches you can get cannot be justified unless you know that the underlying physical process happens to have a spline response (for example your measurements happen to be along the edge of some bent wood.)