I won't call it "bad" practice, but it is frowned upon, because it hinders discoverability.
There is a general understanding that the data layer is set from web page code (or scripts in the web page). Then the tag management system, e.g. Launch, simply acts as the consumer of the data layer.
If you do set the data layer within Launch, I suggest that you mark this clearly, e.g. in the Rule's notes or in the Action's name. This is so that future maintainers know what is happening there.
Also, to help with you with your troubleshooting effort, use the Adobe Experience Cloud Debugger extension for your browser. In its "Events" panel, you can see how the data layer gets set over time. It could be that the data layer value that you're comparing is unavailable at the moment when your Rule runs.