I do the same, but in 5 minute intervals. 30000 should be fine as far as frequency.
One thing I did was not to leave it run. I do a servicestartat after my interval (500). Saves a bunch of battery life and I have had less issues. Once you get it dialed in, it works like a charm. At 30 seconds though, you could run into issues getting a lock with my method however. Do the servicestartat after you get a good lock rather than before.
Just off the top of my head, check your "if" statements. Are you using location.accuracyvalid? I had escaped out of one of my sequences doing that and never went back and shut if off.
One thing I ended up doing was to add a text file log in the location event. and the subs I called from there. It helps a lot for infrequent problems.