The hard coded AllowFree threshold is not suitable for determining whether a free transaction will be confirmed in a reasonable time.
If estimatePriority returns -1 it either means there isn't yet enough data to estimate or there is no priority that is high enough to be confirmed by the desired target, in either case it's better to not send a zero fee transaction.