Doing the GET-request as suggested by TryNinja is probably the safest way to get the correct address.
Under linux this can be done with one command:
curl -i -H "Accept: application/payment-request" -H "Content-Type: application/payment-request" https://bitpay.com/i/YourInvoiceID
And with
jq installed (a commandline json processor) an appealing formatted output appears when entering:
curl -i -H "Accept: application/payment-request" -H "Content-Type: application/payment-request" https://bitpay.com/i/YourInvoiceID | jq
First, is it more advantageous to do that direct payment instead of paying straight to the Bitpay invoice?
Not every wallet has BIP70 implemented. Therefore some user might need the direct address to pay to.
Additionally people are used to send coins 'to addresses'. Using an bitpay invoice number or sending 'to a website' sounds somewhat weird to them.
Second, can Bitpay invoice still detect the payment if you make a direct payment to the address derived?
Yes.