Bonno Bloksma:
    
    
      There is the strange fact that it seems the config is tested
        twice but I guess systemd will try to start a service twice
        before giving up.
    
    I recommend less guessing and more reading your own posts.  (-: 
      You yourself posted the very script fragment where the script
        itself runs the test command twice:
    test_config()
{
        if ! /usr/sbin/dhcpd -t $OPTIONS -q -cf "$DHCPD_CONF" > /dev/null 2>&1; then
                echo "dhcpd self-test failed. Please fix $DHCPD_CONF."
                echo "The error was: "
                /usr/sbin/dhcpd -t $OPTIONS -cf "$DHCPD_CONF"
                exit 1
        fi
}
    See where that runs /usr/sbin/dhcpd in test mode
      twice?  The first time, dhcpd writes the error message
      to the syslog; the second time dhcpd writes the
      error message to its standard error.  Both lots of output end up
      in the journal.
    From the LSB: prefix to the service name in the very
      log output that you posted, we can deduce that systemd is
        running your van Smoorenburg rc script as a
        service, wrapping it in a nonce service unit.  The test
      performed by the van Smoorenburg rc script is
      considered to be a part of your service.  By the time that
      the script is running, and executing the startup test, systemd
      thinks that your service is already running.  The stop and start
      actions of systemd encompass the script as a whole, and operate
      outwith the configuration validation test, not within it.
    Put another way: There is no customizable mechanism to make the
      very execution of the start, stop, and restart
      commands in systemd dependent from first testing some arbitrary
      service-specific condition.  There's no way to tell systemd "only
      actually execute the restart command at all if this
      shell script first returns true".  When running restart,
      systemd will stop your service, start it again, and the test in
      the script will only then run as part of your service's
      initialization.
    The best that you have are mechanisms that cause a startup to
      abort, by failing an ExecStartPre command.  But for
      those you must actually write a proper service unit file. 
        systemd-sysv-generator employs a one-size-fits-all
      approach, and will not generate such service-specific special-case
      stuff in the nonce units that it generates for van Smoorenburg rc
      scripts.  You need a bona fide human being to actually write a
      service unit file.  Even then, that is not enough.  A restart
      will still stop the service before the ExecStartPre
      tests are run, and you won't get what you want.  restart
      is stop then start.