I have a couple on-going conversation threads in Gmail with a number of different people. Is there a way to setup a filter so that it will add a label if the body of any new, unread email contains my name? Then remove the label once I've read the email?

One really crude hack for step 2 would be to have the filter forward the email as well as delete it. You would forward to your own email address with a plus extension, e.g. username+templabelname@gmail.com.

Then a new step 3 would be to catch those emails using the deliveredto:username+templabel@gmail.com search string, and reapply some label.

Not sure how cleanly this method would work, especially because you would get header cruft from the forward (vs. redirecting).

Personally, I would look at #2 since learning scripting for Google Apps would pay off in the long run.

There is no search operator to restrict to the body of a message. I would recommend setting up a filter with your name in the "Has the words" field, and apply the label as your action. There is no need to add "is:unread" because filters apply to incoming messages.

Likewise you cannot remove the label via filter or take automatic action after the message has arrived. But there are a few other options that might help:

Use keyboard shortcuts to remove the label when you finish reading the message. Assuming you are reading the messages from label view, "y" will remove the label, and "[" and "]" will remove the label and move you to the next or previous message.

Use the Hide read labels lab to hide the label if there are no unread messages inside.

Finally, you could also consider setting up a Quick Link or a Multiple Inbox with the search query: is:unread yourname. The link or inbox would automatically update and remove messages from the view after you read them.

The first part: adding a label based on existing keyword is simple, but the second part I think is impossible, because there is no such trigger in Gmail that could cause a filtering operation once an e-mail is read.