AFAIK it’s not doable. An alternative is to override a report class function (like the execute one) to check the state and show a warning to the user in order to prevent the print. Anyway, I am not sure if it is a good practice, maybe someone else can confirm which is the best way to achieve it.
You are right, this solution fits better with the Tryton framework, however it can create confusión for the user who expects to find the report always in the same place.
I do not think there is a valid use case for a conditional report. A report is just displaying record on a printable format (just like there is not conditional usage of a form view).