#4 Al restar dos Vector3 obtienes un Vector3 con las diferencias de las coordenadas entre ámbos. Ejemplo:
Vector3(5,6,2) - Vector3(2,2,2) te daría: Vector3(3,4,0).
El resultado, si te fijas, es un Vector3 que indica la diferencia de coordenadas entre uno y otro o, lo que es lo mismo, la dirección que tiene que tomar en cada uno de los ejes para desplazarte de una posición a otra. En el caso que preguntas la resta se debe a que el primer valor que hay que pasarle a ese método es la dirección (por lo tanto la diferencia entre la posición inicial y la final) y no la posicion final (que sería mousePosition).
El segundo parámetro no es la dirección en la que debe mirar, ese es el primer parámetro. El segundo es opcional, se refiere a, en tu World Space, que dirección se corresponde con Vector3.Up (El eje Y positivo). Por defecto es Vector3.Up, pero si especifica uno será porque está la cámara girada, los ejes colocados de manera diferente o estás trabajando en 2D y te sobra uno de los ejes, eso ya no sé.
Por último: Vector3.Forward, .Up, .Down, etc son constantes que definen direcciones:
Vector3.Zero = Vector3(0,0,0)
Vector3.Forward = Vector3(0,0,1)
Vector3.Up = Vector3(0,1,0)
.... etc