The way we filter our leave is by looking for a keyword 'Leave' in either the task name or the task label. If your leave time is sitting in the 'non-billable' column it's likely because this keyword 'leave' has not been found in the task or task label of the timesheet entry. This means a task name like 'Public Holiday' will not appear in the leave column.
We recommend setting up a single task 'Leave' and using job labels 'Public Holiday, Annual Leave, Sick Leave, Parental Leave, Bereavement Leave etc' in order to differentiate the different types of leave.
Here is a short video on how that's done:
The benefit of having a single 'Leave' job with a single 'Leave' task and multiple sub-tasks (labels) is that you de-clutter your jobs list and tasks list and it makes it easier for your team to search for and find this job.
Alternatively you could add the keyword 'Leave' to the XPM job-task label you already have ie 'Public Holiday - Leave' as a quicker solution to this problem.
Once you've made the above change to your leave XPM job-tasks, let us know and we will re-sync for you to retrospectively apply the changes so your historical reporting is also accurate.