Tried SetIcon? I couldn't easily find anything that allows you to create a Win32::GUI object around a HWND. You might have to look in the source of Win32::GUI and figure out what a Window object is and how to fake one for SetIcon and ChangeIcon.
edit: per https://github.com/gitpan/Win32-GUI/blob/master/GUI.xs#L1788
considered checking the return value of ->ChangeIcon() and then checking GetLastError? per https://github.com/gitpan/Win32-GUI/blob/master/TYPEMAP
HWND and HICON objects are either a hash ref with a "-handle" slice with a integer in that slice, or just an integer like 123. ChangeIcon isnt really method either, its a sub. You should use it as a sub not a method. Although method will maybe sometimes work. Win32::GUI's docs do a poor job of explaining the return values of anything and method vs sub call syntax.