Looks like it may be a timing issue. If I sleep for a few seconds between sending the CMD_CLONE_END packet and looking for a confirmation packet, the progress indicator on the radio gets to 100% and the display goes to "CL END". I still get an error on the console, though:
chirp.errors.RadioError: Failed to communicate with the radio: Did not get clone result from radio.
This isn't a problem. I never finished this bit because it seemed that some of the radios behaved slightly differently in this regard.
Are you sending the appropriate end frame? Each model has a unique one for some reason, so you just have to see what it sends on clone out and replicate it.
To get the radio out of "CL END", I have to boot it.
Right, that's how all the icoms work.