Here is a method you can use instead of decimal.round:
public static decimal RoundHalfUp(this decimal d, int decimals)
{
if (decimals < 0)
{
throw new ArgumentException("The decimals must be non-negative",
"decimals");
}
decimal multiplier = (decimal)Math.Pow(10, decimals);
decimal number = d * multiplier;
if (decimal.Truncate(number) < number)
{
number += 0.5m;
}
return decimal.Round(number) / multiplier;
}
Taken from: Why does .NET use banker's rounding as default?
This question also asks why .Net uses bankers rounding. So I believe it will be a good read for you.
To answer why
This bankers algorithm means that results collected will be evenly spread of rounding up/down when the decimal == .5, so really it is just to even out data results.
Here's another link which describes this by Mr. Skeet