Applying Orthogonalize[] once:
v1 = PolyhedronData["Dodecahedron", "VertexCoordinates"][[1]];
Graphics3D[Line[{{0, 0, 0}, #}] & /@
Orthogonalize[{a, b, c} /.
FindInstance[{a, b, c}.v1 == 0 && (Chop@a != 0.||Chop@b != 0.||Chop@c != 0.),
{a, b, c}, Reals, 4]], Boxed -> False]

And now twice:
Graphics3D[Line[{{0, 0, 0}, #}] & /@
Orthogonalize@Orthogonalize[{a, b, c} /.
FindInstance[{a, b, c}.v1 == 0 && (Chop@a != 0.||Chop@b != 0.||Chop@c != 0.),
{a, b, c}, Reals, 4]], Boxed -> False]

Errr … Why?
I also assumed it would be a numerical error, but didn’t quite understand why, so I tried to implement Gram-Schmidt orthogonalization myself, hoping to understand the problem on the way:
(Included for illustration only, I simply couldn’t quite figure out what’s going on before I reimplemented it myself.)
A critical step here, which I didn’t realize before, is deciding whether a vector we get is zero or not before the normalization step (see
Chopin my code). Otherwise we might get something tiny, possibly a mere numerical error, which is then normalized back into a large value.This seems to be controlled by the
Toleranceoption ofOrthogonalize, and indeed, raising the tolerance, and forcing it to discard tiny vectors fixes the problem you describe.Orthogonalize[ ... , Tolerance -> 1*^-10]works in a single step.