Do decimal separators behave differently for Money and Decimal data types?
The ToString() implementation in the SqlDecimal type in System.Data.Types contains this as the final step in the algorithm:

while (i &gt; 0)
{
    if (i-- == (int)this.m_bScale)
    {
        array3[num2++] = '.';
    }
    array3[num2++] = array2[i];
}
return new string(array3);


Notice there is a hardcoded '.' in there? SqlMoney does not have this as it calls a specific format which uses the current cultureinfo.