Cool ideas. However, if keeping database portability is an issue, it seems like you could accomplish the same thing using a recursive function for saving events in PHP. Another reason to put this logic in the PHP code is, there may be exceptions to the rule, when you don't want a task to be affected by its parent. Dealing with the codebase to handle these instances would be much easier if they were in PHP. Might require a few extra queries, but should be doable.

Might look something like:
<code>
function adjustRelatedEvents($eventID, $recursionCheck=null) {
if ($recursionCheck == null)
$recursionCheck = array();
if (in_array($eventID, $recursionCheck))
die("Recursion found for event $eventID");
array_push($recursionCheck, $eventID);
$parent = parentForID($eventID);
// check end date of parent
// adjust start date of $eventID event accordingly
// save to DB
$children = childrenForID($eventID);
foreach($children AS $child)
adjustRelatedEvents($child['id'], $recursionCheck);
}
</code>