Sophisticated pseudorandom order

Yes, I made the picture change depending on the condition, for demonstration.

The red image persists on some trials because one of your conditions does not set the image, but changes the message variable. What you will want to do in this condition, is set the image to a blank image. e.g.,

# Correct ('return') response to female face + stem
if key_resp_2.corr and correctAns == 'return':  
    happy_face.setImage('red.png')
    # Incorrect ('None') response to female face + stem
elif not key_resp_2.corr and correctAns == 'return':
    happy_face.setImage('black.png')
    # Correct ('None') response to any face + any word except above
elif key_resp_2.corr and correctAns == 'None':
     happy_face.setImage('blank.png')
# Incorrect ('return') response to any face + any word except above
elif not key_resp_2.corr and correctAns == 'None':
    happy_face.setImage('orange.png')