You can get closer to what you want if you add the 'nearest' option to the griddata() call.
You will get an odd artifact, which I figure is due to peculiarities about which is the "closest" point in 3-space.
There is no reason for the surface to follow the edge using griddata(). Gridding takes place in 3-space, so when you get sufficiently far from the edges, the closest points might be from a different z than you were picturing.
If you have a surface that you know should be a ribbon, then there are ways to decompose that.