So here is the calculation for the Guard ability
<GameModifier>
<ModType>Unit</ModType>
<Attribute>AdjustUnitStat</Attribute>
<StrVal>UnitStat_Defense_Pierce</StrVal>
<IsForFormattedDescription>1</IsForFormattedDescription>
<DisplayName>Guarded</DisplayName>
<Duration>1</Duration>
<UpdateDurationAtTurnStart>1</UpdateDurationAtTurnStart>
<Calculate InternalName="Calc" ValueOwner="CastingUnit">
<Expression><![CDATA[[UnitStat_Defense_Pierce]]]></Expression>
</Calculate>
<Calculate InternalName="Value">
<Expression><![CDATA[[Calc] - [UnitStat_Tactical_Auto_Defense_Boost]]]></Expression>
</Calculate>
<Calculate InternalName="ValueForFormattedDescription">
<Expression><![CDATA[[Calc]]]></Expression>
</Calculate>
</GameModifier>
The bold is where your negative comes into play. The tactical auto defense boost is replaced by the other units defense. Thus, if your auto defense boost is larger than the guarding units defense, you yield a penalty instead.
I do not know the intent of the devs with this calculation, but it shouldn't be that the other unit being guarded should yield a penalty, but I do not think that they intended that you gain a super bonus when guarded and the other unit defending for the turn.
If they did intend to just do a simple add to the other unit as per the description, then it should be the following, per the description.
<GameModifier>
<ModType>Unit</ModType>
<Attribute>AdjustUnitStat</Attribute>
<StrVal>UnitStat_Defense_Pierce</StrVal>
<IsForFormattedDescription>1</IsForFormattedDescription>
<DisplayName>Guarded</DisplayName>
<Duration>1</Duration>
<UpdateDurationAtTurnStart>1</UpdateDurationAtTurnStart>
<Calculate InternalName="Calc" ValueOwner="CastingUnit">
<Expression><![CDATA[[UnitStat_Defense_Pierce]]]></Expression>
</Calculate>
<Calculate InternalName="Value">
<Expression><![CDATA[[Calc]]]></Expression>
</Calculate>
<Calculate InternalName="ValueForFormattedDescription">
<Expression><![CDATA[[Calc]]]></Expression>
</Calculate>
</GameModifier>
The problem yields that the defensive bonuses come into play and can make things rather large. Maybe they should just remove the base auto-defense stat to have something like this
<GameModifier>
<ModType>Unit</ModType>
<Attribute>AdjustUnitStat</Attribute>
<StrVal>UnitStat_Defense_Pierce</StrVal>
<IsForFormattedDescription>1</IsForFormattedDescription>
<DisplayName>Guarded</DisplayName>
<Duration>1</Duration>
<UpdateDurationAtTurnStart>1</UpdateDurationAtTurnStart>
<Calculate InternalName="Calc" ValueOwner="CastingUnit">
<Expression><![CDATA[[UnitStat_Defense_Pierce]]]></Expression>
</Calculate>
<Calculate InternalName="Value">
<Expression><![CDATA[[Calc] - 5]]></Expression>
</Calculate>
<Calculate InternalName="ValueForFormattedDescription">
<Expression><![CDATA[[Calc]]]></Expression>
</Calculate>
</GameModifier>
I would be interested to see what folks at Stardock say.