All you are doing in the outer query is getting brand and stock_id then using those to determine the records that get updated.
Use a single query joining to the stock table
UPDATE prices_{$company_id} p
INNER JOIN price_rules pr ON p.company_id = pr.company_id
INNER JOIN feeds f ON f.id = p.feed_id
INNER JOIN stock_{$company_id} s ON s.stock_id = p.stock_id
AND s.csv_data = pr.brand
AND s.company_id = p.company_id
AND s.attribute_id = 5
SET p.brand_markup_percentage = (p.stock_price / 100) * pr.brand_markup_percentage
WHERE p.company_id = ?
AND f.disable_price_rules = 0
AND pr.brand_price_or_percent = 1
AND p.stock_price BETWEEN pr.min_price AND pr.max_price
AND p.price_profile = ?
Why do write your queries so that you have scroll right into the middle of next week to see what it's doing? You wouldn't write your other code on one line without linebreaks and indentations.