1) You problem there would seem to be that event 2 has already become true for the rest (3 & 4) to trigger, thus it won't happen again when 4 becomes true. Events just aren't designed to be fashioned into loops, so it's gonna be difficult. I can't think of any easy way to do it actually, and i've never tried it myself so I can't give you a tried-and-tested solution either.
My best shot at how it might be done would be to not trigger the events based on a previous event becoming true, but by variables hitting a certain number. That way you could put a high repeat count on the events you want to loop and modify the variables to determine whether an event can trigger or not. I'm thinking something like this:
Event 1: Do stuff, set event2 variable to 1.
Event 2: Can trigger when event2 = 1. Does stuff, and sets event2 variable to 0 so it won't repeat, sets event3 variable to 1.
Event 3: Can trigger when event3 = 1. Does stuff, sets event3 to 0, sets event4 to 1.
Event 4: Can trigger when event4 = 1. Does stuff, sets even4 to 0, and finally sets event2 to 1 to let the whole loop repeat.
Could use every-time instead of a repeat count, but would need a safeguard against event 1 going off more than once. This might work, might not, but it's the best idea I've got at the moment.
2) Try using ship-invisible instead. When using a sexp to set it, also make sure that the ship is actually in the mission when the sexp triggers.