U.S. State Capitals Quiz (Python)
You are on the right track in several respects -- for example, putting all
behavior/actions inside of functions. That said, constants are fine at the top
level, and one advantage of putting them there is allowing the reader to
focus on the algorithm without the visual heaviness of a big data structure.
Don't force your user to worry about capitalization: lowercase the data and
then use Python's built-in string methods to capitalize geographic names for
presentation to the user.
Opinions vary on this, but I recommend using natural language as the primary
(not sole) guide when picking variables: in most contexts, for example,
capitals is a better name than stateDict; states better than
statesList. Sometimes a data-type suffix can disambiguate names, but
don't make that your first impulse.
The random library includes a choice() function, so you do not
need MIN, MAX.
I recommend less chatty messages to users in interactive programs. Once
the user understands the basics (computer prints state, user types capital),
they do not require verbose instructions. Ruthless text cutting is
a virtue in these situations.
Nest the main() call under the conditional shown below. This mechanism will
make your scripts amenable to importing, easier debugging, and
automated testing should you ever need it.
Whenever you find yourself creating multiple closely related variables
(correct and incorrect), consider whether you can unify them under a data
structure. Sometimes taking that approach will suggest further refactoring to
simplify code (for example, by reducing if-else branching). In the illustration
below, I started just by focusing on unifying the correct/incorrect tallies,
but that inspired other simplifications in the reporting of overall results.
import random

# Your dict, but lowercase.
capitals = {
    'alabama': 'montgomery',
    'alaska': 'juneau',
    ...
}

def main():
    # Setup.
    states = tuple(capitals)
    tally = {True: 0, False: 0}
    results = {True: 'Correct', False: 'Incorrect'}
    result = ''

    # Quiz loop.
    print('State capitals quiz:')
    while True:

        # Get user reply.
        state = random.choice(states)
        ans = input(f'{result}{state.title()}? ').lower()
        if ans in ('', 'q', 'quit'):
            break

        # Tally result.
        res = ans == capitals[state]
        tally[res] += 1
        result = results[res] + '. '

    # Print overall results.
    fmt = 'Results:\n- {}: {}\n- {}: {}'
    args = (results[True], tally[True], results[False], tally[False])
    print(fmt.format(*args))

if __name__ == '__main__':
    main()

Finally, people who take quizzes generally want to see the right answers.
You could print the correct result immediately in response to a wrong reply. Or
you could keep track of all states with bad replies and print correct answers
at the end.