The issue with Multi-select items is that you have to compare 2 tables (as opposed 2 records or even a record and a table).
Is the list of Catories static (predefined)? If so then you can try:
Filter(Contacts, If("MyCategory One" in ComboBox1.SelectedItems.Value, "MyCategory One" in Category.Value) || If("MyCategoryTwo" in ComboBox1.SelectedItems.Value, "MyCategory two" in Category.Value))
You could also create a list of checkboxes, one for each category. Then your formula should be:
Filter(Contacts, If(Checkbox1.Value=true, "MyCategory One" in Category.Value) || If(Checkbox1.Value=true, "MyCategory two" in Category.Value))
As for the second issue, Do you get any subvalues after Contacts.PrgPers? For example, Contacts.PrgPers.Value