Lo que hay que hacer es poner el siguiente código en la Activity:
@override
protected void onActivityResult (int requestCode, int resultCode, Intent data) {
getSupportFragmentManager().findFragmentById(AQUI_ EL_ID).onActivityResult(requestCode,resultCode,dat a);
}
Haciendo eso haces que la Activity invoque al onActivityResult del Fragment, a mi me funciona perfectamente.
Y en cuanto a la segunda pregunta, el Bundle que te devuelve el onActivityResult es un Bundle completamente nuevo, que nada tiene que ver con el que tú enviaste. Así que si la Activity a la que llamas no te devuelve ningún valor "id" no lo vas a obtener aunque tú lo hayas mandado.