I ended using an ifelse function to detect where rows contained an AM/PM and then specifying format using that, which works pretty well I think.
hobo_dat$DateTime_BST_cor <- ifelse(
grepl("AM|PM", hobo_dat$DateTime_BST), # If the datetime string contains AM/PM
as.POSIXct(hobo_dat$DateTime_BST, format = "%m/%d/%y %I:%M:%S %p"), # Parse with 12-hour format (AM/PM)
as.POSIXct(hobo_dat$DateTime_BST, format = "%m/%d/%Y %H:%M") # Parse with 24-hour format
)