Solution:
The checkout would fail due to the DS_Sagepay_Direct::$validated variable not being set when using the pay page. This was a bug with WooCommerce 1.6 and has been fixed in 2.0.