Detect plugin/theme installation (via upload)

I think your best bet here is to hook into the flow at the time of uploading and processing the uploaded file.

There is a filter (line 327, file.php):

apply_filters( 'wp_handle_upload', array( 'file' => $new_file, 'url' => $url, 'type' => $type ), 'upload' );

You could create a filter within which you do nothing else but create a global variables to hold the current values for:

wp_get_themes();
wp_get_plugins();

then, within your existing functions

HandleThemeUpload() { }
HandlePluginUpload() { }

you get the themes and plugins again and then compare these results with your previous global results using array_diff(): e.g.

$NewPlugin = array_diff( $LatestPlugins, $OldGlobalPlugins );

Then you have the new plugins / themes.

Hope that helps.