I'm drawing a simple Voxel world. When I naively render all the vertices, things look fine. But when I change my code to include a ViewFrustum check, I start getting strange visual glitches like this:

The large square block is meant to be there; the strange triangles on the bottom left are not. These glitches appear all over the screen, and intermittently appear/vanish as I move my camera around. The draw code looks something like this:
basicEffect.World = Matrix.Identity;
basicEffect.View = Matrix.CreateLookAt(
camera.Position,
camera.Position + camera.GetForward(),
camera.GetUp()
);
basicEffect.Projection = Matrix.CreatePerspectiveFieldOfView(
camera.FieldOfView,
camera.AspectRatio,
1.0f,
1000.0f
);
BoundingFrustum viewFrustum = new BoundingFrustum(basicEffect.View * basicEffect.Projection);
List<VertexPositionTexture> vertices = new List<VertexPositionTexture>();
foreach (Voxel voxel in voxelWorld.GetAllVoxels())
{
if (viewFrustum.Intersects(voxel.Cube.BoundingBox))
{
vertices.AddRange(voxel.Cube.GetVertices());
}
}
if (vertices.Count != 0)
{
foreach (EffectPass pass in basicEffect.CurrentTechnique.Passes)
{
pass.Apply();
using (VertexBuffer buffer = new VertexBuffer(
graphicsDevice,
VertexPositionTexture.VertexDeclaration,
vertices.Count,
BufferUsage.WriteOnly))
{
buffer.SetData(vertices.ToArray());
graphicsDevice.SetVertexBuffer(buffer);
}
graphicsDevice.DrawPrimitives(PrimitiveType.TriangleList, 0, vertices.Count);
}
}
So if I remove the viewFrustum.Intersects() check everything is fine. It seems unlikely to me that the viewFrustum check itself is causing the error, but I can't figure out where the problem is coming from. Any suggestions?