Return single row with one to many relationship based on evaluated conditions
from products p right join prices pr ... where p.status = 'PURCHASED'

The condition by left table converts your RIGHT JOIN to INNER JOIN implicitly.

if there is an item_type 'RENEWAL' then this price is used, if not then the 'RENEW' price is used

Use, for example, something like (taking into account the former comment):
SELECT ..., COALESCE(t1.price, t2.price) AS price, ...
FROM products 
LEFT JOIN prices AS t1 ON t1.item_type = 'RENEWAL' AND {another joining conditions} 
LEFT JOIN prices AS t2 ON t2.item_type = 'RENEW' AND {another joining conditions} 
WHERE {another conditions}

IF RENEWAL price exists then it will be returned, if not, but RENEW price exists then you'll get it, else you'll get NULL (you may join more price table copies with another price types in needed order).