A table redrawn over ajax loses every handler bound directly to its rows. .live() answers that by binding once at the document and testing the selector against everything that bubbles up, which works, and is also why a busy page can spend measurable time matching selectors for events it does not care about. .delegate(), new in 1.4.2, takes the container you already have.
// 1.3: every click anywhere in the document is matched against the selector
$('#orders td.status').live('click', markShipped);
// 1.4.2: bound on the table, so only clicks inside it are ever tested
$('#orders').delegate('td.status', 'click', markShipped);
Both survive the redraw, because neither is attached to the rows. The rest of the difference is control. .live() needs the event to reach document, so a stopPropagation() anywhere along the way silently kills it, and it cannot be used after a traversal such as .filter() because all it keeps is the selector string. Removal is per container with .undelegate(), where .die() reaches across the whole page. Where there is a container to bind to, I have not yet found a reason to prefer .live().