Time to get to the bottom of this!
tl;dr: ** @halley1 you are correct:** a negation and axis swap (via rotating (-90,0,0)) is happening.
Also, a (-90,0,0) rotation is both an axis swap AND a negation, hence canceling the actual negation.
My test:
In Blender I made a 4-point pyramid with these magnitude-unique verts.
These are the X,Y,Z values from Blender’s inspector:
0, 1, 0,
1, -1, 0,
0, 0, 1.5,```
I exported it as .blend, .FBX and .OBJ.
As one might expect, .blend and .FBX behaved the same. Ignoring order of verts, paying attention to only X,Y,Z positions:

Oddly, the .OBJ file took a different but analogous numeric path.
First, in the OBJ file the vertices were:
```v 0.000000 0.000000 -1.000000
v -0.900000 0.000000 0.500000
v 1.000000 0.000000 1.000000
v 0.000000 1.500000 0.000000```
so the transmog happened at Export time. This is the OBJ file in Unity:

And finally, the dumper script itself if anyone wants to play around:
using UnityEngine;
using System.Collections.Generic;
// @kurtdekker - put this where there are MeshFilters, it will
// report what unique vertices are the meshes.
public class ShowUniqueVerts : MonoBehaviour
{
void Start ()
{
var mfs = GetComponentsInChildren();
// report on all the mf-ers
foreach ( var mf in mfs)
{
var mesh = mf.mesh;
HashSet<Vector3> uniques = new HashSet<Vector3>();
// inject
for (int i = 0; i < mesh.vertices.Length; i++)
{
Vector3 v = mesh.vertices[i];
uniques.Add(v);
}
Debug.Log("Mesh:" + mesh.name + " on " + mf.name + " has " +
mesh.vertices.Length + " verts and " +
uniques.Count + " unique verts.");
// report
foreach ( var v in uniques)
{
Debug.Log(v);
}
}
}
}