Thanks for the suggestion. Imager looked quite promising, but it seems to do its .ico processing using a XS backend .dll that I won't be able to use on other OSs.
Unfortunately I think I need a pure-Perl solution.
I think you're incorrect about needing a .dll file. I've used imager on a few linux boxes, and though I've never needed to do much with .ico files, I've been more than pleased with having chosen that package to work with.