A primeira parte não entendi... "numeros ficarem perto da virgula... etc..."
Pra colcoar no formato certo, você tem que levar em consideração 1 coisa, o R$ é o próprio MaskekTextBox que coloca?
Se for você ao invés de colocar por exemplo :
txtValor.Text = valor_do_banco.ToString(); você coloca :
txtValor.Text = valor_do_banco.ToString("N");
Esse "N" diz ao VS qual o formato da mascara que vai colocar, esse formato ai é o que separa milhares por "." e centavos por ",".
1000,00 no banco com este formato ficaria 1.000,00.
Se o R$ for você que colcoa você deve colocar :
txtValor.Text = valor_do_banco.ToString("C");
Este "C" faz a mesma coisa do "N" colocando ainda o R$ na frente.
Pesquise os outros formatos que se este não te atender os outros devem...
ATT,
LBarcelosM