Worked it out.
The problem was that the checkout form button was using an image rather than a button, so the code should have been
if (isset($_POST["Checkout"]) || isset($_POST["Checkout_x"])) {
instead of
if (isset($_POST["Checkout"])) {
IE was (for a change) correct, it should never have worked at all, but as Safari and FF coped with my sloppy code, it took longer to work it out.