1ª dúvida, a ordem dos critérios do construtor pode ser a livre escolha? (no meu caso coloquei o cpf primeiro e depois o salário)
Pode sim, voce define a ordem. Com a ordem definida, na hora de passar os valores no construtor voce deve seguir essa ordem.
Se voce quiser atribuir valores na construcao diferente da ordem que atribuiu voce precisa chamar os parametros explicitamente. Ex.:
public Diretor(string cpf, float salario) : base(cpf, salario)
public Diretor(float salario, string cpf) : base(cpf: cpf, salario: salario) { }
Na segunda opcao como pode ver, eu declarei salario e depois cpf, mas no construtor eu passo cpf e depois salario. Para isso eu tive que explicitar o parametro que estava passando.
2ª dúvida, se eu não quiser "cravar" o salário inicial do Diretor, preciso atribuir o argumento salario do construtor Diretor (ficando assim: public Diretor(string cpf, double salario) : base (cpf, salario) )
Correto.