In case of push, SourceTree verifies (correctly) if submodules have open changes in workspace that have not been staged. A warning message is shown (in a separate popup) that shows the submodules with dirty state.
But ST doesn't check if there are staged, but uncommitted changes in a submodule, although those changes make for a "dirty" subrepo state, just as unstaged ones. In both cases, the change has not yet been committed!