I did something based on tpofofn's answer which is using the current rotation turned clockwise/counter-clockwise as the base unit for incrementing. Actually, I didn't need a rotation matrix because rotating a vector clockwise 90deg is just vec = new vector(-vec.y,vec.x).
I added this to the body's current rotation times so the higher the mass, the less the increment. To find which way to rotate, I used the dot product of the rotation's turned 90deg clockwise and the target orientation. This is an example that increments the rotation towards the direction the object is moving in.
//Get the base increment
Vector right = new Vector(-body.rotation.y,body.rotation.x);
//Find out which way to turn
Int direction = Vector.Dot(right,body.velocity);
//Increment in the direction to turn based on mass
body.rotation = (right * direction + body.rotation * body.mass).normalized;
and I did a further check to make sure the rotation doesn't overshoot and wobble back and forth.
right = new Vector(-body.rotation.y,body.rotation.x);
if (Vector.Dot(right,body.velocity) == -direction)
{
body.rotation = body.velocity.normalized;
}
Theoretically, rotational velocity can be applied like this as well by multiplying the base increment by the rotation speed) but my game is an RTS so I have no need for it. The main benefit of using rotation vectors and rotating them this way is that there's no expensive trigonometry involved.