Something like this should work for each character you need to replace:
$_-replace '(?<=\W)(&)(?=.*<\/.*>)', '&' `
-replace '(?<=\W)(')(?=.*<\/.*>)', ''' `
-replace '(?<=\W)(")(?=.*<\/.*>)', '"' `
-replace '(?<=\W)(>)(?=.*<\/.*>)', '>' `
-replace '(?<=\W)(\*)(?=.*<\/.*>)', '∗' } | Set-Content $fileName
which does a positive look-behind with a non-word character, then the capturing group followed by a positive look-ahead.
examples:
updated: http://regex101.com/r/aY8iV3 | original: http://regex101.com/r/yO7wB1