Thanks for the reply!
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, facecolors=colors,
        linewidth=0.0, antialiased=True)

Is the issue that you have transparent lines between the faces?  Set the "shade" kwarg to True and the "antialiased" kwarg to False.
The problem is that the faces themselves are transparent. But if I set shade to False, it becomes solid, so that must be the solution.
If the shading is not what you want, it has been a feature request to implement the smooth coloring that shading does, but without a lightsource.  I have yet to do this, and there have been some attempts to get this right, but nothing finalized yet.  Contributions would be welcomed!
OK, I will try to get this done and send you an implementation.