I've been working on the same question for a while now and would appreciate any advice on what I'm doing wrong or any direction on how to actually solve the problem. :) On xzczd's advice, I retried with just using NDSolve. Also on xzczd's advice, I simplified the problem so that it is copy-paste-runnable.
Here's explicit code of what I'm doing.
(* Parameters *)
α = 4/100; γ = 2; ψ = 2; A = 1/10; θ = 10; δ = 0; σ = 1/10;
(* Define a function *)
ϕ[i_] := i - θ/2 i^2 - δ;
(* Boundaries *)
b = Rationalize[0.11619,10^-10]; (* Rationalize common-valued boundary point s*)
(* Some functions for ODE and solution to i *)
l1 = (1 - z) (1 - z y'[z]/y[z]);
l2 = z (1 + (1 - z) y'[z]/y[z]);
m = z^2 (1 - z)^2 y''[z]/y[z];
(* Solve for i as a function of y and y' *)
isolve = FullSimplify[Solve[{
(((A - i1) (1 - z) + (A - i2) z)/y[z])^(1/ψ) == α/(ϕ'[i1] (y[z] - z y'[z])),
(((A - i1) (1 - z) + (A - i2) z)/y[z])^(1/ψ) == α/(ϕ'[i2] (y[z] + (1 - z) y'[z]))}, {i1, i2}]];
(* There are three potential solutions here. Only the first is
correct, I believe *)
Dimensions[isolve]
i1star = i1 /. isolve[[1, 1]];
i2star = i2 /. isolve[[1, 2]];
cstar = (A - i1star) (1 - z) + (A - i2star) z;
(* Simplify ODE *)
ode = Simplify[ ( α/(1 - 1/ψ) ((cstar/y[z])^(1 - 1/ψ) - 1) + ϕ[i1star] l1 + ϕ[i2star] l2 - γ /
2 (σ^2 l1^2 + σ^2 l2^2) + (σ^2 + σ^2)m/2) ] == 0;
(* Attempt at solution with NDSolve *)
sol = NDSolve[{ode, y[1/100] == b, y[99/100] == b}, y, {z, 1/100, 99/100}, Method -> {"Shooting", "StartingInitialConditions" -> {y[1/100] == b,
y'[1/100] == Rationalize[0.1536914, 10^-10]}}, WorkingPrecision -> 30]
As you can see, I'm starting to shoot from within the boundary, to sidestep the end-point singularities. The solution, I know, looks effectively (negative) quadratic, with endpoints at the boundaries. I was previously implementing a finite difference method because it seemed to deal with the end-points singularities better (I only solved on the interior of the grid). It also seemed to solve quickly.
My question is: is there a better, more robust way to solve this than shooting? Or is the math what it is and that's that?
Thank you.

FindRootbecause solving a large nonlinear system with it can be troublesome and a good starting point is very important forFindRootto give a proper answer. BTW, just to make sure, you need to solve the ODE yourself rather than usingNDSolve, right? – xzczd Oct 28 '15 at 05:07biand I can't figure out how to fix it. And… currently your big code sample is a little frustrating, it'll be better if you can simplify the code sample a little, for example, the code calculatingbiandbandodeisn't relevant, you can just give the result in the sample. If you're not sure whether your deductions for them are correct or not so want us to have a check (it's deprecated, of course), at least add a description for the original problem, I mean, you can express the problem with some equations (in traditional mathematical form). – xzczd Oct 29 '15 at 02:34