There are a few things going on here.
Because the printer is one of the older model printers, the SGD.SET may not work. Also case does matter with SGD commands and the proper setting is lower case "zpl". You may have to send the entire command as raw data: "! U1 setvar \"device.languages\" \"zpl\"\r\n"
Why the printer.GetPrinterControlLanguage is telling you it's CPCL is another issue entirely. This is a common question and it has to do with the difference between the control language of the SDK and the language of the printer. Unfortunately, the GetPrinterControlLanguage function is not requesting the current language of the printer, but the assumed default language based on it's firmware version. You will need to request the current firmware version with the data command: "! U1 getvar \"device.languages\"\r\n"
Find more info on this in: Best Practices For Printing