Note that you may have minSplits set to more than the number of cores in the cluster, and Spark will just run as many as possible at a time. This is better if certain nodes may be slow, for instance.
In general, it is not necessarily the case that doubling the number of cores doing IO will double the throughput, because you could be saturating the throughput with fewer cores. However, S3 is odd in that each connection gets way less bandwidth than your network link can provide, and it does seem to scale linearly with the number of connections. So, yes, taking minSplits up to 4 (or higher) will likely result in a 2x performance improvement.
saveAsTextFile() will use as many partitions (aka splits) as the RDD it's being called on. So for instance:
sc.textFile(myInputFile, 15).map(lambda x: x + "!!!").saveAsTextFile(myOutputFile)
will use 15 partitions to read the text file (i.e., up to 15 cores at a time) and then again to save back to S3.