Does it compile in a simulator? You often get more useful error message, and you should always simulate before synthesising. EDIT: Your comments indicate you have and it's fine.
XST is not always a good representation of correctness of code - it's VHDL is sometimes a little off-spec in interpretation.
I'd have thought you want something like this (with lots of extra whitespace for clarity of answer, I'd not usually write it like this in source-code). You never know, Synplify might be happier with this version:
rgb(7 downto 0) <=
x(2 downto 0)
) --close "unsigned"
) -- extra bracket here - you now have a signed integer you can subtract '1' from
) -- close result_reg index
); -- close colour_lut index
Otherwise, please give more details on the data types involved.