The path_delete() function became a pile of crap when we added hook_path_delete().
For example, I create a node without a path alias. When I delete that node, path_node_delete() calls path_delete(array('source' => 'node/1')). Since path_load() returns FALSE, we get hook_path_delete(FALSE) invoked. WRONG
Now let's say I have a node with two aliases. When I delete that node, path_load() only returns the first alias. The other alias does not get deleted and a hook invoked for it...