I took a quick look at your script:
apart from the pep8 remarks I could make,
camera_is_on calls two times chdk_send_cmd if camera is off, but I'm not even sure it can reach there. Anyway, store the result of chdk_send_cmd, then compare.
Exceptions should be raised in chdk_send_cmd, else you'll have to handle that everywhere and it's a pain.
Trigger relay does way more than trigger, it also initializes the board gpio. Calling it too much may cause issues. Just split it into a setup() and the actual triggering.
reboot camera is /very/ fragile and highly depends on the fact the the camera boots in X seconds. You could make it so that it periodically checks if you can connect to the camera, then set it up.
Finally, the biggest issue is that you have multiple processes that run chdkptp at the same time, and it will probably crash the camera. I don't think you need to use multiprocessing at all, it just makes the code flow very complicated.
Keep it simple:
check if camera is connected
if it's not, boot it
setup camera
as long as we don't want to stop, just take pictures
catch errors from chdkptp and handle correctly
I would recommend trying to use jbaiter's bindings. Some issues just got ironed out a few weeks ago.