You probably should build up the Arguments using a string array and pass them to Start-Process so it can properly escape them.
$Arguments = @()
$Arguments += "/i"
$Arguments += $InstallerFilePath
$Arguments += "/qn"
if($ServerPassword)
{
$Arguments += $ServerPassword
}
Start-Process -Wait msiexec -ArgumentList $Arguments
|
$(If ($ServerPassword -and $ServerPassword -match '.') {"SERVERPASS=""$ServerPassword"""} Else {""}), |