I just looked over the docs for Geo::KML::PolyMap. It looks like the problem is that you're passing in a single entity, rather than an array of entities. The docs are easy to interpret, because it shows a variably named $entity being created, and then later it shows a variable $entities being the parameter. It's easy to miss the singular to plural form. So it may work if you simply change $entities to [ $entities ] in the call--unless it's going to require more than one entity.
When your only tool is a hammer, all problems look like your thumb.