How to only update if nothing has changed? I need to validate several things before I insert
Instead of issuing those checks as separate SELECT statements, make them part of the INSERT statement. You will need to replace the INSERT...VALUES syntax with the INSERT...SELECT one to be able to use a WHERE clause:

INSERT INTO
  waypoint_checkins (runner_id, waypoint_id, time)
SELECT
  runners.id,
  %waypoint_id,
  %time
FROM
  runners
WHERE
  name = %runner_name
  AND is_finished = 'false'
  AND EXISTS (
    SELECT
      *
    FROM
      waypoints
    WHERE id = %waypoint_id
      AND currently_open = 'true'
  )
;


You can see that the first check is directly integrated into the INSERT statement, because the argument applied to runners is a name and you need to get an ID from it as one of the values to be inserted. The second check is in the form of an EXISTS predicate.

All three initial arguments (runner_name, waypoint_id, and time) are thus parameters of this single statement.