I have a number of applications I open as startup scripts with the sleep command because of precisely the same difficulties you have mentioned and it usually works for me. I have just tried these commands both in a terminal and also as a script, both manually and as an autostart script and they work for me.
This suggests that either the caja path you have put in your command is not right and so it is not opening because it doesn’t actually exist or that you have some kind of problem with permissions. In which case it might help to edit the visudo file to give this user permission to carry out operations without needing to use the sudo password. I should say, this command you are using does not appear to need sudo password. But, I only mention this because it is something I have different to you as I need it to run a script at startup which does require the sudo password. One way to test if the command is requiring the sudo command is to manually run it in a terminal. I am assuming you have done that and it works OK? If you want to know exactly how to edit the visudo file, let me know on here and I will post up instructions. Though, like I said, that’s really just a stab in the dark on my part.
Finally, it could be that your SD card has not mounted, even though you have left a 30 second delay with the sleep command. Thus, it doesn’t matter how long the delay, if it is not yet mounted. With that in mind, have you tried to run the commands manually in a terminal immediately following booting up and PRIOR to actually trying to open the SD card from the the caja graphical user interface via the places menu etc? I mention this because if you try to open an external media using the places menu, it will automatically mount the external media at that point and so it is easy to miss the fact it was not mounted up to that point. The way to test if this is the case is, as I said, to try and load the said external media by trying to open it in caja from a terminal. As far as I am aware, this does not attempt to mount the external media in order to open caja at this location. Thus, if it is not already mounted, you will get a message along the lines of the location does not exist.
If that happens, then your problem would not be your commands, but the fact your SD card is not automatically mounting at boot-up. I have experienced precisely this problem with some of my external drives. I fixed it with something called ARIOS Automount, which automatically mounts all external media without having to touch the fstab file. The version I have found to work with UM 14.04 (which is what I am using) is Arios Automount 1.
You can find it here:
http://sourceforge.net/projects/arios/files/repo/arios-automount-1.0_all.deb/download?use_mirror=kent
You might want to install gdebi first (sudo apt-get install gdebi). this allows for very quick and efficient installation of deb files. Though, the first time you try and install a deb file with gdebi, you will need to right click the deb file and choose “properties” and then “opens with” and choose gdebi as the default program to run it. However, you can still use the software center to run it if you wish. It will just take a bit longer to load it and you may also get a message saying this software is “unknown” etc. If that happens, you can just ignore it and install anyway. The only problem would be if you got a “dependencies not satisfied” message. In which case that might mean arios automount 1 does not run automatically with your version of UM and so you should not try to install it. Or, at least, not immediately. This would still be potentially fixable, But, I wont go into that here unless you report back with it as an issue.
Beyond all of the above, I have run out ideas. Though, I am sure there will be others on here who wont have.