メッシュがFlat Shadingの状態でnormals_split_custom_set_from_verticesするとバグ?ってる
bpy.ops.object.shade_smooth() を mesh.normals_split_custom_set_from_vertices() する前に呼ぶこと。
理屈的にはFlat Shadingでは頂点が面毎に法線を持つが、normals_split_custom_set_from_verticesしても両方に面毎に分かれた法線すべてに適応されないのでそうなるのだと思われる。
Smooth Shadingを先に設定してやることで、1頂点1法線になるので直る。
smooth shadingをカスタム法線設定後に呼んでいたため(数週間)ハマった。