How to set required to TRUE or FALSE based on the GIVEN #states?
States are used to set properties/values by javascript. The #required property is for the server-side validation, it can't be controlled using states.

You could either implement an AJAX callback on the text field change to update the required status and rebuild the form, or implement a validation handler which checks the status of the text field and throws an error if it contains text but no payment method has been selected.