Because it gives a duplicate vertex. You should set all the faces that reference the vertex n[j] to reference n[0] instead. Then, optionally, call .CullUnusedVertices to remove any vertices that are no longer used in your mesh.
I also tried to unify mesh windings with weaverbird component. And after that setting the vertex does not produce invalid mesh.
What is the logic behind mesh unify windings? I know that after that mesh face vertex order is always anticlockwise. But how to achieve this and why this can solve my problem I do not have a clue.
a simple way to make an invalid mesh by changing vertex location is by collapsing an edge. Some cases like this are automatically fixed by Weaverbird. Also, the fact that unifying windings (logically the same as the _UnifyMeshNormals Rhino command) fixes it might just be pure chance. If an ABCD face has its order unified, it will become ADCB.