Many pointed out that MY_VAR="$toto" will assign to MY_VAR the current value of $toto or an empty string in case $toto is unset (or in case $toto itself contains an empty string obviously), but I'm surprised no one pointed out yet that MY_VAR="$toto" will not set an environment variable but rather a shell variable (unless a variable named MY_VAR is already present in the environment, perhaps because this is only tangential to the actual question).
However more to the point no, it's not a bad practice, or it's just as bad practice as having any other shell special character inside a variable, which is often not avoidable.
In 99% of the cases the shell will expand the variable in the current shell only once (or will not expand it at all for example when enclosed in single-quotes):
$ MY_VAR='$toto'
$ echo $MY_VAR
$toto
$ echo '$MY_VAR'
$MY_VAR
$ echo "$MY_VAR"
$toto
$ echo $(echo $MY_VAR)
$toto
The 1% of the cases being, for example, when the variable is referenced in an eval expression, which adds a level of indirection:
$ MY_VAR='$toto'
$ eval echo $MY_VAR
$
But that's obviously the expected result, and again, then having any other shell special character inside a variable should be considered a bad practice in the same way:
$ MY_VAR='&&'
$ eval echo $MY_VAR
bash: syntax error: unexpected end of file
(the truth being that using eval is often a bad practice, for this very reason).
So no, having a dollar sign in a shell / environment variable is not a bad practice, at least not more than having any other shell special character.