Я смог заставить его работать так:
var applicationsPipeline = PipelineDefinition<AffiliateRecord, ApplicationRecord>.Create(new IPipelineStageDefinition[] {
PipelineStageDefinitionBuilder.Match<AffiliateRecord>(filter),
PipelineStageDefinitionBuilder.Unwind<AffiliateRecord>(x => x.Applications),
PipelineStageDefinitionBuilder.Match<BsonDocument>(new BsonDocument("$and", and)),
PipelineStageDefinitionBuilder.ReplaceRoot<BsonDocument, ApplicationRecord>("$Applications"),
PipelineStageDefinitionBuilder.Skip<ApplicationRecord>(offset),
PipelineStageDefinitionBuilder.Limit<ApplicationRecord>(limit)
});
, что заставляет меня думать, что ReplaceRoot имеет какую-то ошибку, потому что заставляет меня устанавливать Toutput как List вместо ApplicationRecord.