Set_item_property is not going to work in a tabular form. It will set every instance of salary to CONCEALED, not just for one record. For one record you would have to use set_item_instance_property, but this builtin has no CONCEAL_DATA option.
One way is to create a view and use the view as the source:
create view employees_secured as
, decode(department, 'Head Office', '******', to_char(salary)) salary
There is a work around for you problem.
Create new item in the same data block and
Create a trigger at block level named "POST-QUERY" and write a pl-sql code as
IF :block_name.Department = 'Head Office' THEN
:block_name.new_item := '*****';
:block_name.new_item := :block_name.salary;
Hide the actual column of the salary and put the newly created item in the place of the old one.
Hope this will help you.