Ok, I knew this would happen, I'd make a post and then discover
a solution. The problem was that map8 was not recognizing
$content as an utf8 string (being read in from an external
source) and if I used Unicode::String to make an explicit
utf8 string and pass it to map, it works as expected.
Sorry for wasting people's time.