Platforming movement script is sometimes allowing for double jump

Hello,
I am trying to create the basis for a platforming movement script. Things like Dashes, varying height jumps, etc. I am running into an issue that I suspect is timing related, though I am not sure how. In any case, as the title indicates occasionally I am able to jump randomly in the air, despite having flag checks that ensure I can only jump after having landed again. Since I cannot figure out where the ability for that extra jump is coming from myself, I wanted to share my script to see if someone could help me figure it out. (Script Included Below)

Video Link of issue: https://youtu.be/VEz2qbppekQ

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;

public class PlayerController : MonoBehaviour
{
    [SerializeField] float movementSpeed;
    [SerializeField] float timeToFullSpeed;
    private float fullSpeedTimer;
    private bool atFullSpeed;

    private Vector2 movementVector;

    [Header("Dash Information")]
    [SerializeField] float dashTime;
    [SerializeField] float dashSpeed;
    bool canDash;
    bool isDashing = false;
    float dashTimer;

    [Header("Jump Information")]
    [SerializeField] float jumpSpeed;
    [SerializeField] float maxJumpSpeed;
    [Range(0, 1), SerializeField] float maxJumpTimer;
    float timeSinceLastJump;

    [Range(0, 1), SerializeField] float coyoteTime;
    float fallTimer;
    bool coyoteJump = false;

    [Range(1, 5), SerializeField] float smallHopGravity;
    [Range(1, 5), SerializeField] float gravityModifierFall;
    [Range(1, 100), SerializeField] float freefallMaxSpeed;

    bool canJump;
    bool isJumping = false;

    //Gravity Information
    bool isFalling;

    //Physics Objects
    Rigidbody2D playerRB;

    [Header("Animation")]
    [SerializeField] Animator animator;

    private void Awake()
    {
        playerRB = GetComponent<Rigidbody2D>();

        //setup Jump Variables
        timeSinceLastJump = 0f;
        fallTimer = 0f;
    }

    // Start is called before the first frame update
    void Start()
    {
    }

    // Update is called once per frame
    void FixedUpdate()
    {
        TickTimers();

        HandleMovement();
    }

    void TickTimers()
    {
        if (isJumping)
        {
            timeSinceLastJump += Time.fixedDeltaTime;

            if (timeSinceLastJump > maxJumpTimer)
            {
                isJumping = false;
                playerRB.gravityScale = gravityModifierFall;

                //Animation Trigger
                animator.SetBool("isJumping", false);
            }
        }

        if (isDashing)
        {
            dashTimer -= Time.fixedDeltaTime;
            if (dashTimer < 0)
            {
                isDashing = false;

                //Animation Trigger
                animator.SetBool("isDashing", false);
            }

        }

        if (coyoteJump)
        {
            fallTimer += Time.fixedDeltaTime;

            if (fallTimer > coyoteTime)
            {
                coyoteJump = false;
            }
        }
    }


    void HandleMovement()
    {
        VerticalMovement();

        Walk();

        if (isJumping)
            Jump();

        if (isDashing)
            Dash();
    }

    void Walk()
    {
        if (!isDashing)
        {
            Vector2 playerVelocity = new Vector2(movementVector.x * movementSpeed, playerRB.velocity.y);
            playerRB.velocity = playerVelocity;
        }
    }

    void Jump()
    {
        playerRB.AddForce(Vector2.up * jumpSpeed, ForceMode2D.Impulse);
    }

    void Dash()
    {
            playerRB.AddForce(new Vector2(movementVector.x, 0).normalized * dashSpeed, ForceMode2D.Impulse);
            playerRB.velocity = new Vector2(playerRB.velocity.x, 0);
    }

    void VerticalMovement()
    {
        if (!isFalling)
        {
            if (playerRB.velocity.y < 0)
            {
                playerRB.gravityScale = gravityModifierFall;
                isFalling = true;

                fallTimer = 0f;
                canJump = false;
                coyoteJump = true;
            }
        }

        if (isFalling || isJumping)
        {
            //Limit Vertical Velocity
            playerRB.velocity = new Vector2(playerRB.velocity.x, Mathf.Clamp(playerRB.velocity.y, -freefallMaxSpeed, maxJumpSpeed));
        }
    }

    void OnMove(InputValue value)
    {
        movementVector = value.Get<Vector2>();

        //Animation Triggers
        if (movementVector.magnitude != 0)
            animator.SetBool("isWalking", true);
        else
            animator.SetBool("isWalking", false);
    }

    void OnJump(InputValue value)
    {
        if (value.isPressed)
        {
            if (canJump || coyoteJump)
            {
                playerRB.gravityScale = 1;

                canJump = false;
                coyoteJump = false;

                isJumping = true;

                timeSinceLastJump = 0f;

                //Animation Triggers
                animator.SetBool("isJumping", true);
            }
        }
        if (!value.isPressed)
        {
            if (timeSinceLastJump < maxJumpTimer)
            {
                playerRB.gravityScale = smallHopGravity;
            }

            isJumping = false;

            //Animation Triggers
            animator.SetBool("isJumping", false);
        }
    }

    void OnDash(InputValue value)
    {
        Debug.Log("Dash");
        Debug.Log(movementVector);

        if (!canDash)
            return;

        if (value.isPressed)
        {
            canDash = false;
            dashTimer = dashTime;

            isDashing = true;
            animator.SetBool("isDashing", true);
        }
    }

    private void OnCollisionEnter2D(Collision2D collision)
    {
        isFalling = false;

        canJump = true;
        coyoteJump = false;
        canDash = true;
    }
}