I have investigated and I do get a different interpretation if I switch into visual before publishing.

This test page where i entered (amp)lang; and (amp)rang; in the text pane then previewed and published (later adding the output from http://www.ltg.ed.ac.uk/~richard/utf-8.cgi to the post) gives

Character ⟨

Character name MATHEMATICAL LEFT ANGLE BRACKET

Hex code point 27E8

Decimal code point 10216

and

Character ⟩

Character name MATHEMATICAL RIGHT ANGLE BRACKET

Hex code point 27E9

Decimal code point 10217

If I enter (amp)lang; and (amp)rang; in the text editor then switch to the visual editor before publishing I get:

Character 〈

Character name LEFT-POINTING ANGLE BRACKET

Hex code point 2329

Decimal code point 9001

and

Character 〉

Character name RIGHT-POINTING ANGLE BRACKET

Hex code point 232A

Decimal code point 9002

It appears that the publish/preview without emtering the visual editor the source still contaings the (amp)lang; and (amp)rang; entities, which are interpreted by the browser. Unfortunately the interpretation is html version specific:

In HTML5 these map to:

U+27E8 MATHEMATICAL LEFT ANGLE BRACKET,

U+27E9 MATHEMATICAL RIGHT ANGLE BRACKET

(see spec)

In HTML 4.01 these map to:

U+2329 LEFT-POINTING ANGLE BRACKET,

U+232A RIGHT-POINTING ANGLE BRACKET

In HTML 4.0 these map to

U+3008 LEFT ANGLE BRACKET,

U+3009 RIGHT ANGLE BRACKET,

*(I am not 100% certain that the 4.0 and 4.01 are the right way round here)*

In other words I think my browser is interpreting the symbols as html5, fieldworklinguist's as HTM4 and the visual editor as HTML 4.01.