Sachverhalt:
A.
Die 1982 geborene A._ meldete sich am 9. Mai 2006 aufgrund einer schubförmigen multiplen Sklerose (nachfolgend: MS) bei der Invalidenversicherung zum Leistungsbezug an. Die IV-Stelle Zürich sprach ihr ab 1. Mai 2005 eine halbe Invalidenrente zu (Verfügungen vom 12. September 2007 und 7. Januar 2008). Die dagegen am 17. Oktober 2007 erhobene Beschwerde hiess das Sozialversicherungsgericht des Kantons Zürich mit Entscheid vom 31. Oktober 2008 gut, hob die angefochtenen Verfügungen auf und wies die Sache zu weiteren Abklärungen an die Verwaltung zurück.
Die IV-Stelle gab bei der Gutachterstelle B._ ein polydisziplinäres Gutachten in Auftrag, das vom 22. September 2009 datiert. Ergänzend wurde A._ am 26. März 2010 durch den Regionalen Ärztlichen Dienst (nachfolgend: RAD) untersucht (Bericht vom 30. Juli 2010). Zudem erfolgte beim Spital C._ eine rheumatologische Begutachtung (Gutachten vom 14. März 2011) im Rahmen einer Evaluation der individuellen Leistungsfähigkeit (nachfolgend: EFL; Bericht vom 10. Februar 2011). Nach Durchführung des Vorbescheidverfahrens sprach die IV-Stelle A._ mit Verfügungen vom 9. Oktober und 12. November 2013 ab 1. Juni 2012 eine halbe Invalidenrente zu (Invaliditätsgrad: 57 %).
B.
Gegen beide Verfügungen erhob A._ beim Sozialversicherungsgericht des Kantons Zürich Beschwerde mit dem Rechtsbegehren, diese seien aufzuheben und es sei ihr nach Ablauf der Wartefrist eine ganze Rente zuzusprechen. Das Sozialversicherungsgericht des Kantons Zürich hiess die Beschwerden mit Entscheid vom 27. Februar 2015 teilweise gut, hob die Verfügungen vom 9. Oktober 2013 und 12. November 2013 auf und stellte fest, dass A._ vom 1. Mai 2005 bis 31. August 2006 sowie ab 1. März 2013 Anspruch auf eine halbe Invalidenrente hat.
C.
A._ führt Beschwerde in öffentlich-rechtlichen Angelegenheiten mit dem Begehren, der Entscheid vom 27. Februar 2015 sei aufzuheben und die Sache zu neuer Beurteilung an die Verwaltung zurückzuweisen; eventualiter sei ihr mit Wirkung ab 1. Juli 2010 eine Rente zu 50 % zuzusprechen.

Erwägungen:
1.
Das Bundesgericht wendet das Recht von Amtes wegen an (<ref-law>). Seinem Urteil legt es den Sachverhalt zugrunde, den die Vorinstanz festgestellt hat (<ref-law>). Es kann die Sachverhaltsfeststellung der Vorinstanz, auf Rüge hin oder von Amtes wegen, berichtigen oder ergänzen, wenn sie offensichtlich unrichtig ist oder auf einer Rechtsverletzung im Sinne von <ref-law> beruht, und wenn die Behebung des Mangels für den Ausgang des Verfahrens entscheidend sein kann (Art. 97 Abs. 1 in Verbindung mit <ref-law>). Eine Sachverhaltsfeststellung ist nicht schon dann offensichtlich unrichtig, wenn sich Zweifel anmelden, sondern erst, wenn sie eindeutig und augenfällig unzutreffend ist (<ref-ruling> E. 3.1 S. 44). Es liegt noch keine offensichtliche Unrichtigkeit vor, nur weil eine andere Lösung ebenfalls in Betracht fällt, selbst wenn diese als die plausiblere erschiene (vgl. <ref-ruling> E. 2.1 S. 9; Urteil 9C_967/2008 vom 5. Januar 2009 E. 5.1). Diese Grundsätze gelten auch in Bezug auf die konkrete Beweiswürdigung (vgl. Urteil 9C_999/2010 vom 14. Februar 2011 E. 1).
2.
Die Vorinstanz hat einen Rentenanspruch der Versicherten vom 1. Juni 2012 bis 28. Februar 2013 verneint (Arbeitsfähigkeit: 80 % für angepasste Tätigkeiten; Invaliditätsgrad: 31 %) und ihr erst ab 1. März 2013 eine halbe Invalidenrente (Invalditätsgrad: 57 %) zugesprochen.
Die Beschwerdeführerin macht geltend, ihre Arbeitsfähigkeit sei zu wenig abgeklärt worden und beruft sich auf den Bericht der RAD-Ärztin Dr. med. D._ vom 30. Juli 2010. Ausserdem stehe aufgrund der medizinischen Akten nicht fest, ob und in welchem Umfang sie überhaupt in der Lage sei, auf dem ausgeglichenen Arbeitsmarkt oder im geschützten Rahmen ein Erwerbseinkommen zu erzielen.
3.
3.1. Im Streit liegt der Beweiswert des RAD-Berichts vom 30. Juli 2010. Dessen Verfasserin Dr. med. D._, praktische Ärztin FMH, verfügt über keine Facharztqualifikation und stützte die attestierte Arbeitsfähigkeit von lediglich 50 % in einer angepassten Tätigkeit vornehmlich auf subjektive Angaben der Beschwerdeführerin. Die RAD-Ärztin gab keine Begründung für diese Einschätzung ab, obwohl sie klar von den Erkenntnissen im polydisziplinären Gutachten der Gutachterstelle B._, vom 22. September 2009 (effektiv verwertbare Arbeitsleistung von 80 % in angepasster Tätigkeit) wie auch von der dort zusätzlich eingeholten Stellungnahme vom 26. Mai 2010 abweicht. Vielmehr drängt sich der Eindruck auf, dass Dr. med. D._ am 30. Juli 2010 lediglich die Resultate ihrer Untersuchung vom 26. März 2010 festhielt, ohne die Arbeitsfähigkeit der Versicherten schlüssig zu beurteilen (vgl. dazu auch die RAD-Stellungnahme von Dr. med. E._ vom 12. Juli 2012). Mit den zwischenzeitlich aufgelaufenen Akten, insbesondere dem ergänzenden Bericht der Gutachter der Gutachterstelle B._ vom 26. Mai 2010, setzte sie sich nicht auseinander, was vor dem Hintergrund der einschlägigen Beweiskriterien (vgl. <ref-ruling> E. 5.1 S. 232; <ref-ruling> E. 3a S. 352 mit Hinweis) nicht genügt. Die von der Vorinstanz gezogene Schlussfolgerung, wonach nicht auf den RAD-Bericht von Dr. med. D._ vom 30. Juli 2010 abgestellt werden könne, hält vor Bundesrecht stand (E. 1).
3.2.
3.2.1. In Bezug auf die Vermittelbarkeit der Versicherten hat das kantonale Sozialversicherungsgericht festgestellt, die von der IV-Stelle Ende Januar 2013 eingeleiteten beruflichen Massnahmen seien wegen der subjektiven Einschätzung der Beschwerdeführerin, nicht eingliederungs- bzw. arbeitsfähig zu sein, beendet worden. Die aktenmässig belegten MS-Schübe seien nicht derart zahlreich und die davon ausgehende Einschränkung der Arbeitsfähigkeit in zeitlicher und umfangmässiger Hinsicht nicht dermassen gravierend, dass von fehlender Vermittlungsfähigkeit auf dem ausgeglichenen Arbeitsmarkt auszugehen sei.
3.2.2. Die Ärzte des Spitals C._ führten in ihrer ergänzenden Stellungnahme vom 20. Dezember 2011 aus, dass es sich bei ihrer medizinischen Begutachtung um eine solche rheumatologischer Natur gehandelt habe; eine Beurteilung der neurologischen oder psychiatrischen Erkrankungen sei von ihrer Seite her nicht statthaft und eine konklusive Aussage nur durch entsprechende fachärztliche Exploration möglich. Die Beschwerdeführerin leitet daraus ab, es sei abzuklären, ob sie im ausgeglichenen Arbeitsmarkt überhaupt vermittelbar sei. Dem ist entgegenzuhalten, dass sie bereits durch die Gutachter der Gutachterstelle B._ (vgl. polydiszplinäres Gutachten vom 22. September 2009) umfassend (insbesondere neurologisch und psychiatrisch) abgeklärt wurde. Bei der Begutachtung in der Rheumaklinik des Spitals C._ ging es sodann primär um die Evaluation ihrer funktionellen Leistungsfähigkeit (EFL), was auch explizit der Stellungnahme der RAD-Ärztin Dr. med. D._ vom 2. August 2010 entnommen werden kann. Die EFL ergab, dass die Versicherte für leichte und mittelschwere Arbeit mit einem reduzierten Rendement von 20 % (unverändert) ganztags arbeitsfähig ist. Anhaltspunkte für eine weitergehende, in der MS-Erkrankung begründete Leistungseinbusse fehlen.
Sodann finden sich weder im Bericht des behandelnden Neurologen Dr. med. F._ vom 9. November 2011 noch in den späteren Beurteilungen (vgl. Berichte von Dr. med. F._ vom 4. April 2013 und med. pract. G._ vom 26. Mai 2013) Hinweise auf eine Unverwertbarkeit der Arbeitsfähigkeit (zu den diesbezüglichen Voraussetzungen vgl. statt vieler Urteil 8C_1050/2009 vom 28. April 2010 E. 3.3 mit Hinweisen). Für die Vermittelbarkeit der Versicherten spricht schon deren Restarbeitsfähigkeit von unbestritten mindestens 50 % für angepasste Tätigkeiten. Ausserdem liegt aufgrund der medizinischen Akten in einer (teilzeitlich) zumutbaren Verweistätigkeit keine derart grosse Leistungsminderung vor, dass der ausgeglichene Arbeitsmarkt entsprechende Stellen nicht enthielte. Die Vorinstanz hat gestützt auf den Bericht von Dr. med. F._ vom 4. April 2013 die erhöhte Ermüdbarkeit der Versicherten im Zusammenhang mit dem Krankheitsschub vom Frühling 2013, aber auch die Möglichkeit einer Rückbildung der entsprechenden Symptome berücksichtigt (zur Problematik bei schubweise verlaufenden Erkrankungen vgl. Urteil 8C_666/2009 vom 19. März 2010 E. 3.3). Schliesslich erfolgte der Abbruch der Eingliederungsmassnahmen Ende April 2013 gemäss den verbindlichen vorinstanzlichen Feststellungen aufgrund der fehlenden subjektiven Eingliederungsfähigkeit der Versicherten. Auch daraus kann folglich nicht hergeleitet werden, dass deren Restarbeitsfähigkeit (krankheitsbedingt) nicht verwertbar wäre.
Insgesamt hat das kantonale Sozialversicherungsgericht die Ressourcen der Beschwerdeführerin anhand der relevanten Akten umfassend beurteilt. Der vorinstanzliche Verzicht auf weitere Abklärungen stellt keine Verletzung des Untersuchungsgrundsatzes dar (antizipierende Beweiswürdigung; <ref-ruling> E. 5.3 S. 236; <ref-ruling> E. 5.3 S. 148; <ref-ruling> E. 4b S. 94). Damit bleiben auch die vorinstanzlichen Feststellungen in Bezug auf die Vermittelbarkeit der Versicherten (E. 3.2.1) für das Bundesgericht verbindlich (E. 1.1).
4.
Gegen den von der Vorinstanz in Bezug auf den umstrittenen Zeitraum (E. 2) vorgenommenen Einkommensvergleich bringt die Beschwerdeführerin nichts vor. Sie versäumt es sodann, sich im Hinblick auf den geltend gemachten Eventualantrag auf eine Rente im Mindestumfang von 50 % mit den diesbezüglichen Ausführungen im angefochtenen Entscheid (E. 5.3 und 5.4) auseinanderzusetzen. Aus diesem Grund kann darauf nicht eingetreten werden (<ref-law>). Die Beschwerde ist unbegründet, soweit darauf einzutreten ist.
5.
Dem Ausgang des Verfahrens entsprechend hat die Beschwerdeführerin die Gerichtskosten zu tragen (<ref-law>).

Demnach erkennt das Bundesgericht:
1.
Die Beschwerde wird abgewiesen, soweit darauf einzutreten ist.
2.
Die Gerichtskosten von Fr. 800.- werden der Beschwerdeführerin auferlegt.
3.
Dieses Urteil wird den Parteien, dem Sozialversicherungsgericht des Kantons Zürich und dem Bundesamt für Sozialversicherungen schriftlich mitgeteilt.
Luzern, 19. August 2015
Im Namen der II. sozialrechtlichen Abteilung
des Schweizerischen Bundesgerichts
Die Präsidentin: Glanzmann
Der Gerichtsschreiber: Grünenfelder