edit: post deleted because I want to think about this a bit more.

edit2:
(1) What I'm noticing is that Slice runs from 0 to Slice+1-1
The +1 is to join the end of the strip with the beginning of the strip, and the -1 is because you start counting at zero.
That makes sense... but it means you have Slices+1 vertices in a stack.
But in your triangle definitions, you are indexing vertexindex on the assumption there are Slices vertices in a stack. One less than there actually are.
I'm guessing this will cause things to not line up, but in itself it won't lead to some of the triangles being oriented the wrong way, but there should be a single triangle permanently missing from one of your poles.
(2) Now, you say you are passing this as a
triangle strip?
With triangle strips, we don't define three vertices for every triangle. A triangle occurs with each triple of vertices, so a list of 6 indices will define 4 triangles like this:
(123)456
1(234)56
12(345)6
123(456)
Naturally, these alternate in clockwise/anticlockwise handedness.
But your code looks like your defining triangles separately, and not creating triangle strips. Calling the two triangles 1 and 2, you are passing 6 indices. Three for triangle 1 and three for triangle 2. The graphics card is going to be drawing these four triangles from your 6 indexes because you're telling it to draw a triangle strip:
(111)222 -- clockwise & needed
1(112)22 -- anticlockwise & redundant
11(122)2 -- clockwise & redundant
111(222) -- anticlockwise & needed
As you can see the handedness alternates in a triangle strip. The first and last of these four are the ones you intended to draw, and they are being rendered with opposing handedness, causing backface culling to produce something that looks like a sponge..
