Depends on where you use the command.
It works on all instances from the root container:
srvctl start database -db wagon
SQL> select inst_id, con_id, name, recovery_status, open_mode from gv$pdbs where name = 'PDB1';
INST_ID CON_ID NAME RECOVERY OPEN_MODE
---------- ---------- ---------- -------- ----------
2 3 PDB1 ENABLED MOUNTED
1 3 PDB1 ENABLED MOUNTED
SQL> alter pluggable database pdb1 open instances=all;
Pluggable database altered.
SQL> select inst_id, con_id, name, recovery_status, open_mode from gv$pdbs where name = 'PDB1';
INST_ID CON_ID NAME RECOVERY OPEN_MODE
---------- ---------- ---------- -------- ----------
1 3 PDB1 ENABLED READ WRITE
2 3 PDB1 ENABLED READ WRITE
SQL> alter pluggable database pdb1 save state instances=all;
Pluggable database altered.
srvctl stop database -db wagon; srvctl start database -db wagon
SQL> select inst_id, con_id, name, recovery_status, open_mode from gv$pdbs where name = 'PDB1';
INST_ID CON_ID NAME RECOVERY OPEN_MODE
---------- ---------- ---------- -------- ----------
1 3 PDB1 ENABLED READ WRITE
2 3 PDB1 ENABLED READ WRITE
But it does not work on all instances when issued from the PDB itself:
SQL> alter session set container=pdb1;
Session altered.
SQL> alter pluggable database pdb1 close instances=all;
Pluggable database altered.
SQL> alter pluggable database pdb1 save state instances=all;
Pluggable database altered.
srvctl stop database -db wagon; srvctl start database -db wagon
SQL> select inst_id, con_id, name, recovery_status, open_mode from gv$pdbs where name = 'PDB1';
INST_ID CON_ID NAME RECOVERY OPEN_MODE
---------- ---------- ---------- -------- ----------
2 3 PDB1 ENABLED READ WRITE
1 3 PDB1 ENABLED MOUNTED
srvctl
utility doesn't preserve state. It opens the PDBs in read write mode even when the PDB was in mounted state before bouncing the CDB.