The InstallItemService is used to make Items out of InProgressSubmissions (which are basically WorkflowItems or WorkspaceItems). It has a method that gets an InProgressSubmission and an Identifier|https://github.com/DSpace/DSpace/blob/e65f94da0c6376a70307b4427925158461b07b7d/dspace-api/src/main/java/org/dspace/content/InstallItemServiceImpl.java#L57-L83]. If the identifier is null it creates all kinds of identifiers (currently handles and if configured DOIs). If the identifier is not null it creates exactly the specified Identifier but no other one.
To make this concrete: If you configured your repository to create DOIs and import Items that do not contain any handles, DOIs and handles will be created. If you import SAFs specifying handles, the handles will be created but not DOIs even if your repository is configured to create DOIs.
I discussed this last week in our dev channel in slack. We agreed to make this more consistent by creating all kinds of identifiers even if some kinds have values specified in the SAF while other don't. In such a case the specified ones will be reused and new ones will be created for all kinds of identifier that were not specified in the item but are configured within the repository.