Creating a set of buffers for tiles
You could batch by tiletype, so that the number of buffers submitted is only n (where n is the number of tile types).

e.g.

Dictionary&lt;TileType,List&lt;Tuple&lt;int,int&gt;&gt;&gt; tiles = new Dictionary&lt;TileType,List&lt;Tuple&lt;int,int&gt;&gt;&gt;();

for (int x = Convert.ToInt32(xPos / 2) - 30; x &lt; Convert.ToInt32(xPos / 2) + 30; x++)
{
    for (int y = Convert.ToInt32(yPos / 2); y &lt; Convert.ToInt32(yPos / 2) + 50; y++)
    {
        if (mapXtile &gt; 0 &amp;&amp; mapYtile &gt; 0 &amp;&amp; mapXtile &lt; Globals.mapsizex &amp;&amp; mapYtile &lt; Globals.mapsizey)
        {
            int currentTile = Globals.levelArray[level, mapXtile, mapYtile].TyleType;

            if(!tiles.ContainsKey((TileType)currentTile))
            {
                tiles.Add((TileType)currentTile, new List&lt;Tuple&lt;int,int&gt;&gt;());
            }
            tiles[(TileType)currentTile].Add(new Tuple&lt;int,int&gt;(x*2,y*2));
        }
        mapYtile = mapYtile + 1;
        //mapYtile++;
    }
    mapXtile = mapXtile + 1;
    mapYtile = Convert.ToInt32(yPos / 2);
}

foreach(var tileCoords in tiles[TyleType.grass])
{
    //You would have to modify this to append to the buffer
    createCubeVertices(tileCoords.Item1, tileCoords.Item2, 1, 0f, count, grassVertices);
    SetUpBufferIndices(count, grassIndices);
    count++;
}

foreach(var tileCoords in tiles[TyleType.water])
{
    //You would have to modify this to append to the buffer
    createCubeVertices(tileCoords.Item1, tileCoords.Item2, 1, 0f, count, waterVertices);
    SetUpBufferIndices(count, waterIndices);
    count++;
}

CopyToBuffers(grassVertices, grassIndices);
CopyToWaterBuffers(waterVertices, waterIndices);


While this does involve additional looping, the extra looping will be considerably faster than clearing / sending buffers redundantly.

On the other hand since you seem to be rendering the same couple of meshes multiple times. have you considered Instanced Rendering? That will be a significant speed up, even over batching, and should result in some cleaner code too.