---SOLVED---
Kebrus pointed out that I needed to zero out the W component of my tangent vector when multiplying against the Object2World Matrix:
o.tangentWorld = normalize(mul(_Object2World, half4(half3(v.tangent), 0)));
Here's an explanation of what's going on with the W component: http://docs.unity3d.com/ScriptReference/Mesh-tangents.html and here's some more on how to account for non-unifom scale as well: http://www.arcsynthesis.org/gltut/Illumination/Tut09%20Normal%20Transformation.html
I'm leaving this video up in case anyone else runs into this problem and wants a fix.
--Original Post--
For some reason, the shader I'm working on has an error related to the world-space rotation of the object: the normal direction flips every 90°. I believe I'm having a related problem to http://answers.unity3d.com/questions/510903/shader-issue-normal-map-from-tangent-to-world-spac.html but I don't feel like I understand that solution. Anybody care to chime in or explain the previous solution to me?
If you need the text of the shader, you can download it along with some test textures here: https://drive.google.com/file/d/0B0Y_KKOPmkT1dzhBNEhXWVNuOUU/view?usp=sharing