I think I came across a bug in the drivers! I think… 
My render procedure is something like this:
//create the buffer objects
for(i=0; inumMeshes; i++)
{
GlGenBuffersARB(1,&Modelo->Meshes[i].bufferID);
GlBindBufferARB(GL_ARRAY_BUFFER_ARB, Modelo->Meshes[i].bufferID);
GlBufferDataARB(GL_ARRAY_BUFFER_ARB, sizeof(MD5Vertex)*Modelo->Meshes[i].numVert, NULL, GL_DYNAMIC_DRAW_ARB);
buffer=GlMapBufferARB(GL_ARRAY_BUFFER_ARB,GL_WRITE_ONLY_ARB);
memcpy(buffer,Modelo->Meshes[i].geomCopy,sizeof(MD5Vertex)*Modelo->Meshes[i].numVert);
GlUnmapBufferARB(GL_ARRAY_BUFFER_ARB);
}
//do some other stuff
//draw to depth
for(i=0; inumMeshes; i++)
{
MD5Mesh& mesh=Modelo->Meshes[i];
if (mesh.materialShader->transparent)
continue;
GlBindBufferARB(GL_ARRAY_BUFFER_ARB,mesh.bufferID);
GlVertexPointer(3,GL_FLOAT,sizeof(MD5Vertex),calcOffset(mesh.geomRender,&mesh.geomRender->pos));
GlDrawRangeElements(GL_TRIANGLES,0,mesh.numVert,mesh.numTri*3,GL_UNSIGNED_INT,mesh.Indices);
}
//render some more
//do the animation
MD5SetFrame(Modelo,frame);
for(i=0; inumMeshes; i++)
{
GlBindBufferARB(GL_ARRAY_BUFFER_ARB, Modelo->Meshes[i].bufferID);
buffer=GlMapBufferARB(GL_ARRAY_BUFFER_ARB,GL_WRITE_ONLY_ARB);
memcpy(buffer,Modelo->Meshes[i].geomCopy,sizeof(MD5Vertex)*Modelo->Meshes[i].numVert);
GlUnmapBufferARB(GL_ARRAY_BUFFER_ARB);
}
GlGenBuffersARB return a valid number, so does GlMapBufferARB, and so on…
But this creates some artifacts. Unless I put glFinish after MD5SetFrame and before mapping the buffers, it doesn’t work.
I believe the driver should do all the syncronization work, right? So, where am I doing things wrong or is it a driver bug being worked out?
The drivers are beta.