I thought about what I wrote here a bit more.. and there is one reason where contact.linker can cause a lot of havoc on itself.. more or less.. I even had this once on myself on some emulator image. Some corrupted contacts can lead to contacts.linker crashing => but activity manager has an activity with a db watch which will still be true, because linker did not update the rev-value => linker will spawn again & crash again.
This happens in an endless loop, hammering the DB and ... everything...

It stops if you reboot (did you try reboot without swapping battery once?). After that, somehow, the watches don't fire anymore (although they are still there)... UNTIL any contact is changed, which will cause a new rev and cause the watches firing again.
Best way to check if this is really the issue might be to run contacts.linker manually from command line, do
luna-send -n 1 palm://com.palm.service.contacts.linker/forceAutolink '{}'
and
luna-send -n 1 palm://com.palm.service.contacts.linker/dbUpdatedRelinkChanges '{}'
both should just return "true" after a while. You can also watch the log during the run and have a look for errors.

If they do not return true but some error messages => you're screwed.. (or better your contacts db).
To resolve the issue (if that is the case), my recomondation would be:
1. back up

2. disable contacts for all profiles (hope you don't have your contacts in the palm profile?) => this should clear the db.
3. best also disable / delete IM stuff, because that causes contacts, too.
4. have a look in impostah if there is still contact stuff in the database => databases => persistent => contacts:1 and person:1 should be empty, so should be the databases of all the connectors you used (example contact.google:1 for goolge and so on... ). If you find something, delete it. (I don't take responsibility if this upsyncs.. but from my understanding of sync-endpoints this should not happen...)
Now your device should be empty of all contacts (maybe expect sim) and uhm.. it should not happen again.
Now you can start activating all these contact sync stuff again and wait for the contacts to come back. Maybe you do this one at a time and wait till the sync finishes... you can even run the linker yourself, again and see if it fails.