As for explaining why it is colored this way, the answer is Z-fighting. surf creates a contiguous quadrangulation assuming a fixed grid topology. How faces are created is a hard-coded property of surf, which assumes the first two arguments to specify the points of a grid: the four grid coordinates that make up a face with index (i,j) are obtained as
[X(i); Y(j)], [X(i); Y(j+1)], [X(i+1); Y(j)], [X(i+1); Y[(j+1)]
for i in the range 1:length(X)-1 and j in 1:length(Y)-1.
The way coordinates are given in the question, additional degenerate triangle-shaped quads are generated connecting the upper boundary edges of the cone with z > 0 with the origin. These faces overlap more or less exactly with the quadrangular patches that represent the positive half of the cone: Rounding errors in the coordinates of the smaller quads result in imperfect alignment with the triangular patches, which in turn causes irregularities for the depth test involved when drawing the patches.
You can easily see these additional faces when flipping the order of coordinates for the second cone around, which results in an additional "cylinder" built from quads that connect corresponding boundary edges:
surf([x fliplr(x)], [y fliplr(y)], [z -fliplr(z)]);
alpha 0.5

Alternatively, the original problem stated in the question can be solved with a single call to surf by flipping the upper half around, drawing the whole figure from top to bottom, and (optionally) skipping the redundant columns of zeros, which would result in degenerate patches with all coordinates zero:
surf([fliplr(x) x(:,2:end)], [fliplr(y) y(:,2:end)], [fliplr(z) -z(:,2:end)]);